Pr?misse: Hallo zusammen, jetzt muss ich einen Tomcat-Server einem Stresstest unterziehen, um herauszufinden, wo der Engpass der Anwendung liegt. W?hrend des Testvorgangs hat die von der JVM-Ressource belegte CPU jedoch nicht 50 % erreicht, und MySQL wurde nach unten gezogen.
Jetzt m?chte ich den Engpass des Anwendungsdienstes herausfinden. Wenn die Parallelit?t hoch ist, ist die CPU zu hoch.
Die Methode, an die ich gedacht habe, ist: Erstellen Sie mehrere Threads auf Codeebene, lesen und schreiben Sie nicht die Datenbank und lassen Sie die CPU hochfahren. Ist es m?glich? ?
Vielen Dank~~
一般來說Web應(yīng)用的瓶頸都在數(shù)據(jù)庫上,應(yīng)用服務(wù)器(無論是Tomcat還是別的)負(fù)載過大的話,一般來說只要加服務(wù)器就能解決的。
如果希望降低成本,找出應(yīng)用的瓶頸在哪,壓測是有些竅門的,比如:
把mysql存儲(chǔ)引擎改成blackhole
,這樣數(shù)據(jù)庫就不會(huì)容易被輕易拖垮。
如果 CPU 占用太多,是不是已經(jīng)使用了數(shù)據(jù)庫連接池,限制鏈接的創(chuàng)建。為了減少數(shù)據(jù)庫的訪問,某些更新少的數(shù)據(jù)是不是可以放緩存如 Redis,不需要每次都訪問數(shù)據(jù)庫去取數(shù)據(jù)。
簡單壓力的測試,我喜歡用 apache server 里的 ab,復(fù)雜的可以試試 JMeter,壓力測試就比較容易分析找出問題在那。
jvm資源占用的cpu一直還沒到50%,mysql已經(jīng)被拖垮了
這怎么看都像是數(shù)據(jù)庫操作方面的問題,比如 SQL 需要優(yōu)化,或者需要加緩存以減少數(shù)據(jù)庫操作??床怀雠c Tomcat 有什么關(guān)系。
mysql都掛了,應(yīng)該不是tomcat瓶頸,你要查查sql是否都優(yōu)化了,另外開啟mysql統(tǒng)計(jì),查查看是否有慢sql,是否有全表掃描,索引是否高效。另外有沒有使用連接池對數(shù)據(jù)庫做并發(fā)控制,mysql支持的并發(fā)跟cpu核心數(shù)有關(guān)。一般慢sql容易拖垮數(shù)據(jù)庫
一般系統(tǒng)瓶頸的話增加服務(wù)器數(shù)量、優(yōu)化請求基本上都能解決,更大的瓶頸基本上都是在數(shù)據(jù)庫鏈接上,按照你說的你是想要測試一下你的請求并發(fā)瓶頸,但是如果你不連接數(shù)據(jù)庫進(jìn)行測試,基本上是沒什么效果的,對真實(shí)項(xiàng)目并沒有什么幫助,獲取的瓶頸并不是你真正的瓶頸