3 回答

TA貢獻1872條經驗 獲得超4個贊
您還可以檢查 tuto 為執行器添加自定義指標,但這似乎有點復雜(但是您必須編寫自己的指標 bean 并將其注入代碼中,覆蓋 objectMapper 以進行映射等... )
或者可能激活 jackson、spring-security、javax.validation 上的日志信息,以檢查每個操作的日志時間,但不是很精確

TA貢獻1854條經驗 獲得超8個贊
你真正需要的是 Java Thread Profiler,它會告訴你到底出了什么問題,你可以使用任何 APM 工具,我最喜歡的是 GLOWROOT 。我在類似的場景中使用它來測量 API 的性能并識別慢跟蹤將清楚地告訴您哪個方法正在花費時間,您可以看到從方法調用開始到內部調用的所有方法的整個跟蹤,甚至可以識別慢查詢(如果有的話)。希望這可以幫助
示例跟蹤:

TA貢獻1785條經驗 獲得超4個贊
無需更改方法即可期待 HttpServletRequest。您可以使用AspectJ
使用它,您可以收集在每種方法上花費的時間并從中分析數據。
創建一個方法計時注釋
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodTiming {
}
在您的請求中,創建一個地圖,以保留所有方法及其所用時間:
public class Request {
private Map<String, Long> methodTimings = new TreeMap<String, Long>();
public void addMethodTiming(String classAndMethodName, long executionTimeMillis) {
Long value = methodTimings.get(classAndMethodName);
if (value != null) {
executionTimeMillis += value;
}
methodTimings.put(classAndMethodName, executionTimeMillis);
}
}
然后,創建將處理它的 Aspect 類:
@Aspect
@Component
public class MethodTimingAspect {
private static final String DOT = ".";
@Around("@annotation(MethodTiming)")
public Object timeAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = null;
StopWatch watch = new StopWatch();
try {
watch.start();
result = joinPoint.proceed();
} finally {
watch.stop();
long executionTime = watch.getLastTaskTimeMillis();
String className = joinPoint.getTarget().getClass().getSimpleName();
String methodName = joinPoint.getSignature().getName();
String classAndMethodName = className + DOT + methodName;
Object[] methodArgs = joinPoint.getArgs();
if (methodArgs != null) {
for (Object arg : methodArgs) {
if (arg instanceof Request) {
// inject time back into Request
Request request = (Request) arg;
request.addMethodTiming(classAndMethodName, executionTime);
break;
}
}
}
}
return result;
}
最后,只需在您希望測量的方法上添加@MethodTiming:
@MethodTiming
public Request handleRequest(Request request) {
// handle the Request
return request
}
您的請求對象將在處理之后擁有類似的東西
"methodTimings": {
"RequestService.handleRequest": 2610,
"AnotherRequestService.anotherMethod": 1351
}
添加回答
舉報