压力测试与提升服务器能力的几个方法
一般來說,壓力測試用的都是apache軟件自帶的ab命令,這個命令可以自己手動規定模擬多少個人同時訪問目標網址同時這些人訪問多少次。ab的格式如下:
#ab -c 1000 -n 50000 http://192.168.1.202/index.html
這句話的意思是模擬3000個用戶同時訪問192.168.1.202的主頁,訪問50000次。注意url一定要寫全,不可以就寫一個192.168.1.202。
但是ab有一點缺憾,那就是只能訪問靜態網頁,如果是動態網頁比如是聊天室那種網頁就訪問不了,這種情況需要搭配shell腳本來搞定。
?ab的結果如下:
這份報告里面顯示了 目標服務器軟件是1.2.7的nginx,并發1000,請求了50000次,其中50000次請求有3700多個失敗了(不算優秀)。總共花了13秒多,一共交換了多少個字節,其中80%的請求反應只花費了100ms,18%的請求響應花費了1秒以上,剩余2%的響應用了3秒。
當我們需要提升并發值的時候,可能服務器在默認的配置下就會顯示大量的連接錯誤。這些主要是因為四點,1)socket需要高的內存,服務器本身硬件能力是否夠用;2)能否一口氣建立多個socket;3)建立了多個socket之后能否同時打開多個文件,同時文件能按socket返回,4)網卡給力,是萬兆以太網卡。
提升高并發性能以及優化nginx的招數如下:
1)#ulimit -n 20000:默認值是1024,這個值代表一個進程最多能開啟幾個文件;
2)/proc/sys/net/ipv4/tcp_tw_recycle 這個文件默認為0,改成1的話表示系統會快速回收tcp連接;
3)/proc/sys/net/ipv4/tcp_tw_reuse 這個文件默認為0,改成1的話表示系統快速利用tcp;
4)/proc/sys/net/ipv4/tcp_syncookies 這個文件默認是1,改成0的話表示系統不會進行“洪水防御”;
5)nginx.conf里的keep_timeout=0,即請求結果之后不保留tcp鏈接,因為在高并發之下,keepalive會占用大量的socket鏈接時間,當這個值改成0之后,通過/status看,waiting值會大幅度減少,http的響應頭里沒有keep_alive而是connection:close;(keep_alive這個是在http的響應頭看到的,這個東西指的是用戶在訪問forum.php的時候就會保持連接,然后只要是在規定時間內再訪問css,js等東西的時候,就可以繼續使用這個鏈接,這個對于大用戶的網站來說,弊端是有的,讓人趕快把坑讓出來。)
6)nginx.conf里的 event{}中的work_connections,默認是1024,可以臭不要臉的改成10240;
7)/proc/sys/net/core/somaxcon,監聽隊列的長度,默認值是128,可以改成50000左右。
8)nginx.conf的全局設定里添加一句話:worker_rlimit_nofile 10000;,指的是一個工作進程可以打開10000個文件。
壓力測試最好是多臺機器一起ab,二三臺就夠了,而不是一臺機器自己孤獨的壓,畢竟客戶端也是有瓶頸的。客戶端更改瓶頸的主要方式就是#ulimit -n和擴大somanconn的值。
轉載于:https://blog.51cto.com/chenx1242/1773210
總結
以上是生活随笔為你收集整理的压力测试与提升服务器能力的几个方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨境电商Crazysales的高稳定性架
- 下一篇: 性能测试总结(二)---测试流程篇