從零搭建項目開發(fā)框架-24系統(tǒng)性能監(jiān)控

系統(tǒng)在初期運行時可能沒問題,每個功能都快速響應(yīng),但是隨著數(shù)據(jù)量的增多,可能個別功能不能快速響應(yīng),但是用戶還不好描述具體哪地方慢,這時候就需要通過AOP來進行性能監(jiān)控,及時發(fā)現(xiàn)系統(tǒng)存在的問題。

@Aspect
public class PerformanceAspect {
    private static Logger logger = LoggerFactory.getLogger("performanceLog");

    @Around("execution (* com.critc.*.*.service.*.*(..))")
    public Object performanceIterceptor(ProceedingJoinPoint joinPoint) throws Throwable {
        Object result = null;
        long l = System.currentTimeMillis();
        result = joinPoint.proceed();
        long consume = System.currentTimeMillis() - l;
        if (consume > 3000) {
            //記錄系統(tǒng)操作較慢的service處理過程
            logger.info("實體類:" + joinPoint.getTarget());
            logger.info("方法名:" + joinPoint.getSignature().getName());
            // 得到被攔截方法參數(shù),并打印
            Object[] args = joinPoint.getArgs();
            for (int i = 0; i < args.length; i++) {
                logger.info("方法參數(shù):" + i + " -- " + args[i]);
            }
            logger.info("用時:" + consume);
        }
        return result;
    }
}

applicationContext.xml增加配置

  <!-- 系統(tǒng)性能監(jiān)控切面-->
    <bean id="performanceAspect" class="com.critc.plat.core.aop.PerformanceAspect"/>

這個aop的原理是@Around環(huán)繞型切面,開始時記錄當前時間,結(jié)束時把結(jié)束時間-開始時間,如果超過3000毫秒,則記錄對應(yīng)的日志。

這樣就可以監(jiān)控所有service層的操作時間,如果操作時間超過3秒,記錄下當前類名、方法名及所有參數(shù),便于追溯問題,可以進行后續(xù)的性能調(diào)優(yōu),比如加索引、優(yōu)化數(shù)據(jù)存儲等等。

源碼下載

本階段詳細源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容