Merge branch 'pr-disk-overflow' into 4.3.6

This commit is contained in:
tjq 2023-09-02 13:49:25 +08:00
commit 4a9f38c760
2 changed files with 22 additions and 7 deletions

View File

@ -19,6 +19,7 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Set;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
/**
* 脚本处理器
@ -78,17 +79,23 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor {
String result;
final Charset charset = getCharset();
try (InputStream is = process.getInputStream(); InputStream es = process.getErrorStream()) {
try {
InputStream is = process.getInputStream();
InputStream es = process.getErrorStream();
POOL.execute(() -> copyStream(is, inputBuilder, omsLogger, charset));
POOL.execute(() -> copyStream(es, errorBuilder, omsLogger, charset));
ForkJoinTask<?> inputSubmit = POOL.submit(() -> copyStream(is, inputBuilder, omsLogger, charset));
ForkJoinTask<?> errorSubmit = POOL.submit(() -> copyStream(es, errorBuilder, omsLogger, charset));
success = process.waitFor() == 0;
// 阻塞等待日志读取
inputSubmit.get();
errorSubmit.get();
} catch (InterruptedException ie) {
omsLogger.info("[SYSTEM] ScriptProcessor has been interrupted");
} finally {
result = String.format("[INPUT]: %s;[ERROR]: %s", inputBuilder.toString(), errorBuilder.toString());
result = String.format("[INPUT]: %s;[ERROR]: %s", inputBuilder, errorBuilder);
}
return new ProcessResult(success, result);
}
@ -132,11 +139,11 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor {
return scriptPath;
}
private static void copyStream(InputStream is, StringBuilder sb, OmsLogger omsLogger, Charset charset) {
private void copyStream(InputStream is, StringBuilder sb, OmsLogger omsLogger, Charset charset) {
String line;
try (BufferedReader br = new BufferedReader(new InputStreamReader(is, charset))) {
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append(line).append(System.lineSeparator());
// 同步到在线日志
omsLogger.info(line);
}
@ -145,6 +152,13 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor {
omsLogger.warn("[SYSTEM] copyStream failed.", e);
sb.append("Exception: ").append(e);
} finally {
try {
is.close();
} catch (IOException e) {
log.warn("[ScriptProcessor] close stream failed.", e);
omsLogger.warn("[SYSTEM] close stream failed.", e);
}
}
}

View File

@ -68,7 +68,8 @@ public class SystemInfoUtils {
}
metrics.setDiskUsed(bytes2GB(total - free));
metrics.setDiskTotal(bytes2GB(total));
// 防止内存溢出导致total为负数,导致找不到worker实例
metrics.setDiskTotal(bytes2GB(total < 0 ? Long.MAX_VALUE >> 6 : total ));
metrics.setDiskUsage(miniDouble(metrics.getDiskUsed() / metrics.getDiskTotal()));
}