1、IO性能調優的過程:OS級別->進程級->線程級->文件級
vmstat(或者iostat,可以查看系統磁盤的讀寫量及cpu佔用率)->iotop(定位到什麼進程在作祟)->systemtap->
2、cpu性能調優的過程:vmstat->top(查看進程號)->pidstat(查看哪個線程消耗了cpu:pidstat -p 10846 -u -d -t -w -h 1 1000)->jstack(做thread dump,例如:jstack -l 10846>10846.threadump)->查看nid(nid指native ID 對應系統的tid,但tid顯示的10進制,nid顯示的是16進制)->printf %x'\n' 10861->轉換後的結果爲2a6d->對應到threaddump文件中,查到nid在哪一行,從而確定代碼的哪一行對cpu的使用比較高
3.tomcat配置
4、JVM內存是否開的越大越好,爲什麼?
答:JVM內存開的越大,JVM在進行Full GC所需的時間越久,由於Full GC時stop whole word的,如果是用於響應HTTP請求的服務器,這個時候就表現爲停止響應,對於需要低延遲的應用來說,這是不可接受的,對於需要高吞吐量的應用來說,可以不在乎這種停頓,比如一些後臺的應用之類的,那麼內存可以適當調大一些
5、如果tps曲線圖上下波動很大,那你怎麼去分析問題?
答:比如:1、網絡的波動,2、壓力過大,3、防火牆設置不當,4、環境不乾淨,壓測期間有其他用戶在訪問服務器,5、線程是有掛起,6、數據庫鎖,7、不正常的GC;這幾個問題都會引起tps上下波動很大
6、性能測試流程
答:獲取測試需求->測試架構的調研、業務模型調研、確定需求->測試計劃(屬於部門老大工作)->測試方案設計->環境的搭建->測試用例設計->測試數據準備->測試環境試運行->測試腳本開發->創建模型(場景)->執行場景(此過程中,需監控調試)->測試結果分析->問題反饋(相應的研發人員處理問題)->再次測試->最終報告
7、cpu資源負載高如何定位分析問題
答1、用top找到最耗資源的進程id,2、查詢最消耗資源的java線程( top -H -p 進程號)3、打印java 棧 信息(在jdk的bin下執命令: jstack pid>pid.threaddump
4、將耗資源的java的tid(十進制)轉換爲nid(十六進制){因爲系統級的tid對應threaddump中的nid},5、查看pid.threaddump文件中的nid,從而找到出問題java代碼的行號 ,6、
同時要看一下堆的情況,在jdk的bin目錄執行:jmap - heap pid;jmap -histo pid
8、堆內存和棧內存的區別?
答:堆主要用來存放對象的,棧主要是用來執行程序的
9.top的-H參數的意思
答;-H : Threads toggle(線程切換),所以top -H -p pid的意思就是找出線程切換消耗cpu的線程
可能存在的問題:1、程序中可能存在死循環,導致服務器負載超高(使用top指令查看負載高達100+), 需要藉助Linux的proc虛擬文件系統找到具體的問題程序,2、程序不合理使用session,需要藉助Linux的proc文件系統找出原因,