From 5ef79791cf93200c938b09dbd2461a7775391825 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 05 四月 2026 23:59:17 +0800
Subject: [PATCH] #线程日志
---
src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
index 04f30fe..3762364 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
@@ -36,12 +36,16 @@
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadPoolExecutor;
@Data
@Slf4j
public class ZyStationV5Thread implements Runnable, com.zy.core.thread.StationThread {
private static final int SEGMENT_EXECUTOR_POOL_SIZE = 64;
+ private static final int EXECUTOR_QUEUE_WARN_THRESHOLD = 20;
+ private static final int EXECUTOR_ACTIVE_WARN_THRESHOLD = 48;
+ private static final long SEGMENT_EXECUTE_WARN_MS = 10_000L;
private DeviceConfig deviceConfig;
private RedisUtil redisUtil;
@@ -131,14 +135,33 @@
if (task == null || task.getStep() == null || task.getStep() != 2) {
return;
}
- submitSegmentCommand((StationCommand) task.getData());
+ StationCommand command = (StationCommand) task.getData();
+ logExecutorAbnormal("queue-poll", command);
+ submitSegmentCommand(command);
}
private void submitSegmentCommand(StationCommand command) {
if (command == null || executor == null || segmentExecutor == null) {
return;
}
- executor.submit(() -> segmentExecutor.execute(command));
+ executor.submit(() -> {
+ long start = System.currentTimeMillis();
+ try {
+ segmentExecutor.execute(command);
+ } finally {
+ long costMs = System.currentTimeMillis() - start;
+ if (costMs >= SEGMENT_EXECUTE_WARN_MS) {
+ log.warn("V5杈撻�佸懡浠ゅ垎娈垫墽琛岃�楁椂杩囬暱锛宒eviceNo={}, taskNo={}, stationId={}, targetStaNo={}, costMs={}",
+ deviceConfig.getDeviceNo(),
+ command.getTaskNo(),
+ command.getStationId(),
+ command.getTargetStaNo(),
+ costMs);
+ logExecutorAbnormal("segment-finish-slow", command);
+ }
+ }
+ });
+ logExecutorAbnormal("after-submit", command);
}
@Override
@@ -265,7 +288,7 @@
@Override
public boolean clearPath(Integer taskNo) {
- if (taskNo == null) {
+ if (taskNo == null || taskNo <= 0) {
return false;
}
if (zyStationConnectDriver == null) {
@@ -381,6 +404,28 @@
return commandResponse;
}
+ private void logExecutorAbnormal(String scene, StationCommand command) {
+ if (!(executor instanceof ThreadPoolExecutor)) {
+ return;
+ }
+ ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
+ int activeCount = threadPoolExecutor.getActiveCount();
+ int queuedCount = threadPoolExecutor.getQueue() == null ? 0 : threadPoolExecutor.getQueue().size();
+ if (activeCount < EXECUTOR_ACTIVE_WARN_THRESHOLD && queuedCount < EXECUTOR_QUEUE_WARN_THRESHOLD) {
+ return;
+ }
+ log.warn("V5杈撻�佺嚎绋嬫睜鍑虹幇鍫嗙Н锛宻cene={}, deviceNo={}, taskNo={}, stationId={}, targetStaNo={}, poolSize={}, activeCount={}, queuedCount={}, completedCount={}",
+ scene,
+ deviceConfig.getDeviceNo(),
+ command == null ? null : command.getTaskNo(),
+ command == null ? null : command.getStationId(),
+ command == null ? null : command.getTargetStaNo(),
+ threadPoolExecutor.getPoolSize(),
+ activeCount,
+ queuedCount,
+ threadPoolExecutor.getCompletedTaskCount());
+ }
+
@Override
public CommandResponse sendOriginCommand(String address, short[] data) {
return zyStationConnectDriver.sendOriginCommand(address, data);
--
Gitblit v1.9.1