Merge branch 'pr-HeZhanfeng-fix-multi-thread-safety-vulnerabilities' into 5.1.0-bugfix

This commit is contained in:
tjq 2024-10-26 00:44:59 +08:00
commit 827bcd2502

View File

@ -6,7 +6,7 @@ import tech.powerjob.common.model.SystemMetrics;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.server.common.module.WorkerInfo; import tech.powerjob.server.common.module.WorkerInfo;
import java.text.DecimalFormat; import java.text.NumberFormat;
/** /**
* Worker机器状态 * Worker机器状态
@ -48,32 +48,40 @@ public class WorkerStatusVO {
* 27.7%(2.9/8.0 GB) * 27.7%(2.9/8.0 GB)
*/ */
private static final String OTHER_FORMAT = "%s%%%s / %s GB"; private static final String OTHER_FORMAT = "%s%%%s / %s GB";
private static final DecimalFormat df = new DecimalFormat("#.#");
private static final double THRESHOLD = 0.8; private static final double THRESHOLD = 0.8;
// 静态 NumberFormat 实例线程安全
private static final NumberFormat NUMBER_FORMAT;
// 静态初始化块配置 NumberFormat 的格式
static {
NUMBER_FORMAT = NumberFormat.getInstance();
// 设置最小小数位数为 0
NUMBER_FORMAT.setMinimumFractionDigits(0);
// 设置最大小数位数为 1
NUMBER_FORMAT.setMaximumFractionDigits(1);
}
public WorkerStatusVO(WorkerInfo workerInfo) { public WorkerStatusVO(WorkerInfo workerInfo) {
SystemMetrics systemMetrics = workerInfo.getSystemMetrics(); SystemMetrics systemMetrics = workerInfo.getSystemMetrics();
this.status = 1; this.status = 1;
this.address = workerInfo.getAddress(); this.address = workerInfo.getAddress();
this.cpuLoad = String.format(CPU_FORMAT, df.format(systemMetrics.getCpuLoad()), systemMetrics.getCpuProcessors()); this.cpuLoad = String.format(CPU_FORMAT, NUMBER_FORMAT.format(systemMetrics.getCpuLoad()), systemMetrics.getCpuProcessors());
if (systemMetrics.getCpuLoad() > systemMetrics.getCpuProcessors() * THRESHOLD) { if (systemMetrics.getCpuLoad() > systemMetrics.getCpuProcessors() * THRESHOLD) {
this.status ++; this.status ++;
} }
String menL = df.format(systemMetrics.getJvmMemoryUsage() * 100); String menL = NUMBER_FORMAT.format(systemMetrics.getJvmMemoryUsage() * 100);
String menUsed = df.format(systemMetrics.getJvmUsedMemory()); String menUsed = NUMBER_FORMAT.format(systemMetrics.getJvmUsedMemory());
String menMax = df.format(systemMetrics.getJvmMaxMemory()); String menMax = NUMBER_FORMAT.format(systemMetrics.getJvmMaxMemory());
this.memoryLoad = String.format(OTHER_FORMAT, menL, menUsed, menMax); this.memoryLoad = String.format(OTHER_FORMAT, menL, menUsed, menMax);
if (systemMetrics.getJvmMemoryUsage() > THRESHOLD) { if (systemMetrics.getJvmMemoryUsage() > THRESHOLD) {
this.status ++; this.status ++;
} }
String diskL = df.format(systemMetrics.getDiskUsage() * 100); String diskL = NUMBER_FORMAT.format(systemMetrics.getDiskUsage() * 100);
String diskUsed = df.format(systemMetrics.getDiskUsed()); String diskUsed = NUMBER_FORMAT.format(systemMetrics.getDiskUsed());
String diskMax = df.format(systemMetrics.getDiskTotal()); String diskMax = NUMBER_FORMAT.format(systemMetrics.getDiskTotal());
this.diskLoad = String.format(OTHER_FORMAT, diskL, diskUsed, diskMax); this.diskLoad = String.format(OTHER_FORMAT, diskL, diskUsed, diskMax);
if (systemMetrics.getDiskUsage() > THRESHOLD) { if (systemMetrics.getDiskUsage() > THRESHOLD) {
this.status ++; this.status ++;