7 3 超負荷安全處理 綜合壓力測試

2021-10-23 05:33:01 字數 3246 閱讀 7700

(2.1)收到太多資料報處理不過來

限速:epoll技術,乙個限速的思路;在epoll紅黑樹節點中,把這個epollin【可讀】通知乾掉;

在printtdinfo()中做了乙個簡單提示,大家根據需要自己改造**;

(2.2)積壓太多資料報傳送不出去

見void csocekt::msgsend(char *psendbuf)

…大家多思考,看有沒有什麼遺漏。。。。。。。。

(2.3)連入安全的進一步完善

void csocekt::ngx_event_accept(lpngx_connection_t oldc)

if(m_connectionlist.size() > (m_worker_connections * 5))

…大家多思考,看有沒有什麼遺漏。。。。。。。。

(3.1)配置檔案內容和配置項確認

(3.2)整理業務邏輯函式

非常希望同學們好老師 一起測試。一般要測試很多天,跑的時間長了可能 會暴露下次,跑的時間短了可能還暴露不出來;

scanthread

socket()

connect()

funcsendrecvdata()

send()

recv()

funcclosesocket()

closesocket();

funccreatesocket()

socket()

connect();

老師建議:

(1)大家有裝置,有條件,都來測試;每個人都要200%的用心測試;

收包,簡單的邏輯處理,發包;

(2)建議如果有多個物理電腦;客戶端單獨放在乙個電腦;

建議用高效能linux伺服器專門執行伺服器程式

windows也建議單獨用乙個電腦來測試;

(3)測試什麼?

a)程式崩潰,這明顯不行,肯定要解決

b)程式執行異常,比如過幾個小時,伺服器連線不上了;沒有回應了,你發過來的包伺服器處理不了了;

c)伺服器程式占用的記憶體才能不斷增加,增加到一定程度,可能導致整個伺服器崩潰;

top -p 3645 :顯示程序占用的記憶體和cpu百分比,用q可以退出;

cat /proc/3645/status ---------vmrss: 7700 kb

遇到錯誤,及時更正;最好放在不同的物理電腦上測試;

(4.1)最大連線只在1000多個

日誌中報:csocekt::ngx_event_accept()中accept4()失敗

這個跟 使用者程序可開啟的檔案數限制有關; 因為系統為每個tcp連線都要建立乙個socekt控制代碼,每個socket控制代碼同時也是乙個檔案控制代碼;

ulimit -n ---------1024 === 1018

我們就必須修改linux對當前使用者的程序 同時開啟的檔案數量的限制;

nginx中建立worker子程序

官方nginx ,乙個master程序,建立了多個worker子程序;

master process .

/nginx

worker process

(i)ngx_master_process_cycle()

//建立子程序等一系列動作

(i)ngx_setproctitle()

//設定程序標題

(i)ngx_start_worker_processes()

//建立worker子程序

(i)for

(i =

0; i < threadnums; i++

)//master程序在走這個迴圈,來建立若干個子程序

(i)ngx_spawn_process

(i,"worker process");

(i) pid =

fork()

;//分叉,從原來的乙個master程序(乙個叉),分成兩個叉(原有的master程序,以及乙個新fork()出來的worker程序

(i)//只有子程序這個分叉才會執行ngx_worker_process_cycle()

(i)ngx_worker_process_cycle

(inum,pprocname)

;//子程序分叉

(i)ngx_worker_process_init()

;(i)

sigemptyset

(&set)

;(i)

sigprocmask

(sig_setmask,

&set,

null);

//允許接收所有訊號

(i) g_threadpool.

create

(tmpthreadnums)

;//建立執行緒池中線程

(i) _socket.

initialize_subproc()

;//初始化子程序需要具備的一些多執行緒能力相關的資訊

(i) g_socket.

ngx_epoll_init()

;(i) m_epollhandle =

epoll_create

(m_worker_connections)

;(i)

ngx_epoll_add_event((

*pos)

->fd...

.);(i)

epoll_ctl

(m_epollhandle,eventtype,fd,

&ev)

;(i)

ngx_setproctitle

(pprocname)

;//重新為子程序設定標題為worker process

(i)for(;

;)..

...//子程序開始在這裡不斷的死迴圈

(i) g_threadpool.

stopall()

;//考慮在這裡停止執行緒池;

(i) g_socket.

shutdown_subproc()

;//socket需要釋放的東西考慮釋放;

(i)sigemptyset

(&set)

;(i)

for(;;

).//父程序[master程序]會一直在這裡迴圈

超負荷 慢性自殺

也許你會認為我是個故弄玄虛的標題黨,不過我需要澄清一下。首先,這是真的,超負荷寫 的確意味著慢性自殺。然後問題就來了,為什麼呢?這是什麼原因呢?答案就是 長期不斷的慢性應激。或許你會問我寫這篇文章的目的是什麼。很簡單,這件事曾發生在我身上,我不希望大家步我的後塵。那麼什麼是慢性應激?根據維基百科所述...

質量管理 超負荷工作

無論什麼專案,為達到產品或專案質量要求,都會給某個或全部專案干係人帶來嚴重的負面後果,例如 1 為滿足客戶要求而讓專案團隊超負荷工作,就可能導致疲勞 錯誤或返工。2 為滿足專案進度而匆忙完成預定的質量檢查,就可能造成檢驗疏漏。摘自pmbok專案質量管理 對於it桌面外包專案,不要為了sla,pe等達...

centos7 3 中mysql5 7原始碼安裝

cd usr local src wget 2.解壓 tar zxvf mysql 5.7.12 linux glibc2.5 x86 64.tar mv mysql 5.7.12 linux glibc2.5 x86 64 usr local mysql 3.安裝 3.1.安裝之前刪除之前的安裝資...