在測試一個簡單系統接口性能壓力時,壓到必定數量,程序老是崩潰,查看相關機器相關數據時,CPU、內存、IO佔用均不高,問題天然出如今其它地方
先介紹下系統部件架構html
Resin版本爲:
[root@localhost lib]# java -classpath ./resin.jar com.caucho.Version
Resin-3.2.1 (built Fri, 17 Oct 2008 04:11:01 PDT)
Copyright(c) 1998-2008 Caucho Technology. All rights reservedjava
mysql版本爲:
Server version: 5.5.39mysql
在跑接口壓力時,當TPS達到100時,程序當報錯提示爲resin重啓了linux
[2016-03-23 12:07:17] JDK detected deadlock. Restarting Resin. [12:07:17.929] {resin-41} JDK detected deadlock. Restarting Resin. [2016-03-23 12:07:17] "001" Id=79 BLOCKED on com.orient.dbpool.o@2726965a owned by "http--80-32" Id=59
問題該怎麼解決呢?這裏先,說說性能問題瓶頸解決的一個思路:
一、查看是否爲服務器硬件瓶頸,這裏涉及到CPU、內存、IO讀寫,咱們能夠經過vmstat、sar或iostat來觀察;經過觀察,在本例中問題不存在硬件的瓶頸
二、網絡瓶頸,能夠經過查看網絡利用率來肯定,方式不少,這裏不介紹;不過若是在局域網內、且這僅僅是一個web服務類型網站,與視頻類網站不一樣,因此本例中也不存在網絡的問題
三、linux操做系統瓶頸,linux關於性能方面設計到的內核參數太多,這裏能夠參數《Linux服務器性能調整》一書,當作參考書使用;本例中,對linux TCP鏈接釋放時間作了調整,但問題依舊;
四、中間件瓶頸,這裏指的就是第三方的中間件,好比tomcat、JVM、數據庫等等,通常在網絡下載後的程序,須要根據服務器實際情部分作調整;在本例中,調整了相關參數後,性能有所提升,但個別接口還有問題;
五、應用的瓶頸,這就須要與開發一塊兒調試,好比業務邏輯、sql的優化、算法等等ios
本例中,linux內核相關參數調整,網上有更詳細的參數,請自行參考:web
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30
在本次測試中,相關中單件的調整以下:
一、Resin 處理能務的調整:
Resin目錄下conf\resin.xml文件參數調整算法
<jvm-arg>-server</jvm-arg> <jvm-arg>-Xmx512m</jvm-arg> <jvm-arg>-Xms256m </jvm-arg> <jvm-arg>-Xss256k</jvm-arg> <memory-free-min>10M</memory-free-min> <thread-max>3000</thread-max> <socket-timeout>20s</socket-timeout> <keepalive-timeout>15s</keepalive-timeout>
具體的調整方式,能夠參考JVM的性能調優相關文章,如:http://uule.iteye.com/blog/2114697sql
二、web數據庫鏈接參數調整
有的程序中參web鏈接數據的處理能力有作限制,本例中,默認初始處理能力爲1,這裏作修改數據庫
dbInitialCapacity="1" (初始化處理能力) dbMaxCapacity="5" (最大處理能力
三、mysql數據庫性能處理調整
具體的可參數MySQL數據庫性能能調整進行,根據機器內存,CPU狀況進行調整,能夠參考blog:http://www.educity.cn/shujuku/692462.html
本例中,對最大鏈接數、鏈接池作了調整tomcat
--max_connections=1200
--innodb_buffer_pool_size=2500M
四、程序內部問題,好比登錄時達到了最大的文件打開數,等等
這裏設計到內部程序這裏就不例舉了
參考資料:
linux性能調整:http://download.csdn.net/detail/machen_smiling/7736543
mysql性能調整:http://www.educity.cn/shujuku/692462.html
linux性能監控命令:http://os.51cto.com/art/201412/460698_all.htm