高性能服務器優化與檢測

源自《LInux高性能服務器編程》- 遊雙

高併發計算服務器數量
每秒查詢率QPS:對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準,即每秒請求數,即最大談吐能力。
併發數:併發數和QPS是不同的概念,一般說QPS會說多少併發用戶下QPS,當QPS相同時,併發用戶數越大,網站併發處理能力越好。當併發用戶數過大時,會造成進程(線程)頻繁切換,反正真正用於處理請求的時間變少,每秒能夠處理的請求數反而變少,同時用戶的請求等待時間也會變大。 找到最佳線程數能夠讓web系統更穩定,效率更高。

指令使用

ps

ps -ef | grep 命令詳解
ps 命令的作用是顯示進程信息的。
ps -ef | grep Server 顯示Server進程的信息。

系統檢測工具

mpstat

mpstat(multi-processer statistics),它能實時檢測多處理器系統上每個CPU的使用情況
%usr:除了nice值爲負的進程,系統上其他進程運行在用戶空間的時間佔CPU總運行時間的比例。
%sys:系統上所有進程運行在內核空間的時間佔CPU總運行時間的比例,但不包括硬件和軟件中斷消耗的CPU時間。
%idle:系統空閒的時間佔CPU總運行時間的比例。
以上三個字段基本上反映了代碼中業務邏輯代碼和系統調用所佔的比例,以及系統還能承受多大的負載。

(Nice值是類UNIX操作系統中表示靜態優先級的數值。每個進程都有自己的靜態優先級,優先級高的進程得以優先運行。
Nice值的範圍是-20~+19,擁有Nice值越大的進程的實際優先級越小(即Nice值爲+19的進程優先級最小,爲-20的進程優先級最大),默認的Nice值是0。由於Nice值是靜態優先級,所以一經設定,就不會再被內核修改,直到被重新設定。Nice值只起干預CPU時間分配的作用,實際中的細節,由動態優先級決定。
“Nice值”這個名稱來自英文單詞nice,意思爲友好。Nice值越高,這個進程越“友好”,就會讓給其他進程越多的時間。)

iostat

iostat主要用於監控系統設備的IO負載情況,iostat首次運行時顯示自系統啓動開始的各項統計信息,之後運行iostat將顯示自上次運行該命令以後的統計信息。
Linux IO實時監控iostat命令詳解

ifstat

ifstat(interface statistics)是一個簡單的網絡流量檢測工具。

vmstat

vmstat(virtual memory statistics)能實時輸出系統的各種資源的使用情況,比如進程信息、內存使用、CPU使用率以及I/O使用情況。

netstat

netstat是一個功能很強大的網絡信息統計工具。
netstat -t | grep 127.0.0.1:9006 查看指定IP:PORT的TCP連接狀態。

strace

strace是測試服務器性能的重要工具。它跟蹤程序運行過程中執行的系統調用和接收到的信號,並將系統調用名、參數、返回值及信號名輸出到標準輸出或者指定的文件。

nc

nc(netcat)主要被用來快速構建網絡連接。我們可以讓它以服務器的方式運行,監聽某個端口並接收客戶連接,因此它可以用來調試客戶端程序。我們也可以使之以客戶端方式運行,向服務端發起連接並收發數據,因此它可以用來調試服務器程序,此時它有點像telnet程序。
nc -C 127.0.0.1 9006連接服務器。

lsof

lsof(list open file)是一個列出當前系統打開的文件描述符的工具。

tcpdump

tcpdump是一款經典的網絡抓包工具。

服務器調製、調試和測試

壓力測試

使用webbench進行壓力測試。

運行./webbench -c 10500 -t 5 -2 http://127.0.0.1:9006/,可知服務器可以承受1w+的併發連接,每秒處理請求數約4.5w(224613/5),且沒有處理失敗的請求。(webbench的HTTP請求僅僅只是訪問web的首頁,即http://127.0.0.1:9006/,並沒有測試登錄等頁面)
壓力測試-成功
增大併發連接數./webbench -c 11000 -t 5 -2 http://127.0.0.1:9006/,發現fork第10808 個子進程時失敗。
壓力測試-失敗
再次運行,發現最大隻能 fork 9099 個子進程了。這是因爲webbench異常退出後並沒有結束fork的子進程,因此需要killall webbench結束fork的所有子進程。
壓力測試-失敗2
ulimit用於shell啓動進程所佔用的資源,可以用來設置系統的限制。在root下進行open filesmax user processes設置(普通用戶下同一時間可以打開的文件描述符最大隻能設置4096,最大的用戶進程數只能設置63698。
linux下進程的進程最大數、最大線程數、進程打開的文件數和ulimit命令修改硬件資源限制
ulimit
目前的問題,修改了open filesmax user processes之後fork第10808 個子進程時失敗,電腦性能的限制?默認的最大的用戶進程數63698>>10808,爲什麼只能 fork 10808 個子進程?
試着改小max user processes=15000,即ulimit -u 15000,再次運行,fork第10808 個子進程時失敗。猜測應該是系統性能的限制或者一些設置的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章