前提: 大家好,現在要壓測一台tomcat伺服器,想找出應用程式的瓶頸在哪,但在測試過程中,jvm資源佔用的cpu一直還沒到50%, mysql已經被拖垮了。
現在我想找出應用程式服務的瓶頸,多少併發時,cpu會被佔用過高,請問怎麼實現呢?
我想到的方法是:在程式碼層面上建立多個線程,不讀寫資料庫,讓cpu上去。請問可行不? ?
感謝~~
phpcn_u15822017-06-28 09:24:50
一般來說Web應用的瓶頸都在資料庫上,應用伺服器(無論是Tomcat還是別的)負載過大的話,一般來說只要加伺服器就能解決的。
如果希望降低成本,找出應用的瓶頸在哪,壓測是有些竅門的,例如:
把mysql儲存引擎改成blackhole
,這樣資料庫就不會容易被輕易拖垮。
PHP中文网2017-06-28 09:24:50
如果 CPU 佔用太多,是不是已經使用了資料庫連接池,限制連結的建立。為了減少資料庫的訪問,某些更新少的資料是不是可以放快取如 Redis,不需要每次都訪問資料庫去取資料。
簡單壓力的測試,我喜歡用 apache server 裡的 ab,複雜的可以試試 JMeter,壓力測試就比較容易分析找出問題在那裡。
仅有的幸福2017-06-28 09:24:50
jvm資源佔用的cpu一直還沒到50%,mysql已經被拖垮了
這怎麼看都像是資料庫操作方面的問題,例如 SQL 需要最佳化,或是需要加上快取以減少資料庫操作。看不出與 Tomcat 有什麼關係。
大家讲道理2017-06-28 09:24:50
mysql都掛了,應該不是tomcat瓶頸,你要查一下sql是否都優化了,另外開啟mysql統計,查查看是否有慢sql,是否有全表掃描,索引是否高效。另外有沒有使用連線池對資料庫做並發控制,mysql支援的並發跟cpu核心數有關。一般慢sql容易拖垮資料庫
世界只因有你2017-06-28 09:24:50
一般系統瓶頸的話增加伺服器數量、優化請求基本上都能解決,更大的瓶頸基本上都是在資料庫連結上,按照你說的你是想要測試一下你的請求並發瓶頸,但是如果你不連結資料庫進行測試,基本上是沒什麼效果的,對真實專案並沒有什麼幫助,取得的瓶頸並不是你真正的瓶頸