第一:
一般程式都有很多細小的功能模組或者流程,首先需要定位是具體那個模組/流程,判斷標準,一是觀察實際執行時間,如果時間差異很小無法區分,那就需要透過對程式碼改造,列印每個流程所需要的時間。一般程式碼如下:
常規寫法:
long begin = System.currentTimeMillis();
try {
// .... 具體的程式碼段
} finally {
long end= System.currentTimeMillis();
System.out.println("cost: " + (end - begin));
}
此種方式需要在要記錄花費時間的地方都加上上述程式碼。
也可透過Spring AOP進行實現:
@Pointcut("execution(public * namespace.*.*(*))") public void point() { } @Around("point()") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); try{ return joinPoint.proceed(); } finally {
} }
如果java是透過Spring開發的建議可以透過AOP實現,只需要要統計花費時間方法上加上註解即可,不用修改原始碼,常規的記錄時長需要新增的程式碼會更多。
AOP的機制入下圖:
程式碼在改造後重新部署,觀察java的執行日誌log:查詢"cost: XXXXX"根據XXXXX大小就可以知道那個部分消耗的時間較多。然後根據消耗時間多的地方進行程式碼最佳化。
一般問題可能是由java記憶體問題,業務流程處理效率問題,資料庫sql問題引起,供參考。
第二:
程式耗時可能硬體環境也會有影響,查找了下網上給的標準,供參考。
影響效能因素
透過vmstat、sar、iostat組合檢測是否是CPU瓶頸
透過free、vmstat組合檢測是否是記憶體瓶頸
透過iostat檢測是否是磁碟I/O瓶頸
透過netstat檢測是否是網路頻寬瓶頸
如果存在硬體上的瓶頸問題,可能就需要進行硬體升級或者擴容解決。
(1)經驗判斷,直覺。
(2)開啟除錯,一組組任務關掉,不斷縮小範圍,直到定位到bug .
(3)上述搞不定,找高手。。。
第一:
一般程式都有很多細小的功能模組或者流程,首先需要定位是具體那個模組/流程,判斷標準,一是觀察實際執行時間,如果時間差異很小無法區分,那就需要透過對程式碼改造,列印每個流程所需要的時間。一般程式碼如下:
常規寫法:
long begin = System.currentTimeMillis();
try {
// .... 具體的程式碼段
} finally {
long end= System.currentTimeMillis();
System.out.println("cost: " + (end - begin));
}
此種方式需要在要記錄花費時間的地方都加上上述程式碼。
也可透過Spring AOP進行實現:
@Pointcut("execution(public * namespace.*.*(*))") public void point() { } @Around("point()") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); try{ return joinPoint.proceed(); } finally {
long end= System.currentTimeMillis();
System.out.println("cost: " + (end - begin));
} }
如果java是透過Spring開發的建議可以透過AOP實現,只需要要統計花費時間方法上加上註解即可,不用修改原始碼,常規的記錄時長需要新增的程式碼會更多。
AOP的機制入下圖:
程式碼在改造後重新部署,觀察java的執行日誌log:查詢"cost: XXXXX"根據XXXXX大小就可以知道那個部分消耗的時間較多。然後根據消耗時間多的地方進行程式碼最佳化。
一般問題可能是由java記憶體問題,業務流程處理效率問題,資料庫sql問題引起,供參考。
第二:
程式耗時可能硬體環境也會有影響,查找了下網上給的標準,供參考。
影響效能因素
透過vmstat、sar、iostat組合檢測是否是CPU瓶頸
透過free、vmstat組合檢測是否是記憶體瓶頸
透過iostat檢測是否是磁碟I/O瓶頸
透過netstat檢測是否是網路頻寬瓶頸
如果存在硬體上的瓶頸問題,可能就需要進行硬體升級或者擴容解決。