Skip to content

Commit 2d31c2a

Browse files
committed
perf[command]: add thread pool to process command
1 parent a3d729d commit 2d31c2a

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

monitor/src/main/java/com/zfoo/monitor/util/OSUtils.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515

1616
import com.zfoo.monitor.*;
1717
import com.zfoo.net.util.NetUtils;
18-
import com.zfoo.protocol.exception.RunException;
19-
import com.zfoo.protocol.util.*;
18+
import com.zfoo.protocol.util.FileUtils;
19+
import com.zfoo.protocol.util.IOUtils;
20+
import com.zfoo.protocol.util.StringUtils;
21+
import com.zfoo.protocol.util.ThreadUtils;
2022
import com.zfoo.scheduler.util.TimeUtils;
2123
import org.slf4j.Logger;
2224
import org.slf4j.LoggerFactory;
@@ -27,12 +29,15 @@
2729

2830
import java.io.File;
2931
import java.io.IOException;
30-
import java.io.InputStream;
3132
import java.text.NumberFormat;
3233
import java.util.ArrayList;
3334
import java.util.HashMap;
3435
import java.util.List;
36+
import java.util.concurrent.ExecutorService;
37+
import java.util.concurrent.Executors;
38+
import java.util.concurrent.ThreadFactory;
3539
import java.util.concurrent.TimeUnit;
40+
import java.util.concurrent.atomic.AtomicInteger;
3641

3742
/**
3843
* Oshi库封装的工具类,通过此工具类,可获取系统、硬件相关信息
@@ -254,6 +259,15 @@ public static SystemInfo os() {
254259
}
255260

256261
// -----------------------------------------------------------------------------------------------------------------
262+
private static final ExecutorService executors = Executors.newCachedThreadPool(new MonitorThreadFactory());
263+
public static class MonitorThreadFactory implements ThreadFactory {
264+
private final AtomicInteger threadNumber = new AtomicInteger(1);
265+
@Override
266+
public Thread newThread(Runnable runnable) {
267+
var threadName = StringUtils.format("monitor-t-{}", threadNumber.getAndIncrement());
268+
return new Thread( runnable, threadName);
269+
}
270+
}
257271
public static String execCommand(String command) {
258272
logger.info("execCommand [{}]", command);
259273
try {
@@ -286,23 +300,21 @@ private static String doExecCommand(String command, File wd) throws IOException,
286300
var err = new StringBuilder();
287301

288302
// 异步读取输出,避免缓冲区阻塞
289-
var outThread = new Thread(ThreadUtils.safeRunnable(() -> {
303+
executors.submit(ThreadUtils.safeRunnable(() -> {
290304
try {
291305
out.append(StringUtils.bytesToString(IOUtils.toByteArray(process.getInputStream())));
292306
} catch (IOException e) {
293307
throw new RuntimeException(e);
294308
}
295309
}));
296-
var errThread = new Thread(() -> {
310+
executors.submit(ThreadUtils.safeRunnable(() -> {
297311
try {
298312
err.append(StringUtils.bytesToString(IOUtils.toByteArray(process.getErrorStream())));
299313
} catch (IOException e) {
300314
throw new RuntimeException(e);
301315
}
302-
});
303316

304-
outThread.start();
305-
errThread.start();
317+
}));
306318

307319
var finished = process.waitFor(256, TimeUnit.SECONDS);
308320
if (!finished) {
@@ -312,9 +324,6 @@ private static String doExecCommand(String command, File wd) throws IOException,
312324

313325
process.destroy();
314326

315-
outThread.join();
316-
errThread.join();
317-
318327
// 获取线程的退出值,0代表正常退出,非0代表异常中止
319328
int exitValue = process.exitValue();
320329
if (exitValue != 0) {

0 commit comments

Comments
 (0)