(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.安裝之前刪除之前的安裝資...