diff --git a/frontend/src/pages/System/Metrics/Dashboard/index.tsx b/frontend/src/pages/System/Metrics/Dashboard/index.tsx index 725bed10..b30bd2c4 100644 --- a/frontend/src/pages/System/Metrics/Dashboard/index.tsx +++ b/frontend/src/pages/System/Metrics/Dashboard/index.tsx @@ -147,11 +147,27 @@ const MetricsDashboard: React.FC = () => { }, [autoRefresh, loadMetrics]); // 格式化字节为 GB(统一单位) - const formatBytes = (bytes: number): string => { + // 处理 JVM 返回 -1 表示"无限制"的情况 + const formatBytes = (bytes: number, showUnlimited: boolean = false): string => { + if (bytes < 0) { + return showUnlimited ? '无限制' : '-'; + } const gb = bytes / 1024 / 1024 / 1024; return `${gb.toFixed(2)} GB`; }; + // 计算内存使用百分比(处理 max 为 -1 或 0 的情况) + const calcMemoryPercent = (used: number, max: number, committed?: number): number => { + if (max > 0) { + return (used / max) * 100; + } + // 如果 max 无效,使用 committed 作为参考 + if (committed && committed > 0) { + return (used / committed) * 100; + } + return 0; + }; + // 格式化百分比 const formatPercent = (value: number): string => { return value.toFixed(2); @@ -203,22 +219,22 @@ const MetricsDashboard: React.FC = () => { regions: metrics.memory.regions ? { eden: metrics.memory.regions.eden ? { used: formatBytes(metrics.memory.regions.eden.used), - max: formatBytes(metrics.memory.regions.eden.max), + max: formatBytes(metrics.memory.regions.eden.max, true), committed: formatBytes(metrics.memory.regions.eden.committed), } : null, oldGen: metrics.memory.regions.oldGen ? { used: formatBytes(metrics.memory.regions.oldGen.used), - max: formatBytes(metrics.memory.regions.oldGen.max), + max: formatBytes(metrics.memory.regions.oldGen.max, true), committed: formatBytes(metrics.memory.regions.oldGen.committed), } : null, survivor: metrics.memory.regions.survivor ? { used: formatBytes(metrics.memory.regions.survivor.used), - max: formatBytes(metrics.memory.regions.survivor.max), + max: formatBytes(metrics.memory.regions.survivor.max, true), committed: formatBytes(metrics.memory.regions.survivor.committed), } : null, metaspace: metrics.memory.regions.metaspace ? { used: formatBytes(metrics.memory.regions.metaspace.used), - max: formatBytes(metrics.memory.regions.metaspace.max), + max: formatBytes(metrics.memory.regions.metaspace.max, true), committed: formatBytes(metrics.memory.regions.metaspace.committed), } : null, } : null, @@ -604,10 +620,14 @@ const MetricsDashboard: React.FC = () => {
最大: - {formatBytes(metrics.memory.regions.eden.max)} + {formatBytes(metrics.memory.regions.eden.max, true)}
@@ -629,10 +649,14 @@ const MetricsDashboard: React.FC = () => {
最大: - {formatBytes(metrics.memory.regions.oldGen.max)} + {formatBytes(metrics.memory.regions.oldGen.max, true)}
@@ -654,10 +678,14 @@ const MetricsDashboard: React.FC = () => {
最大: - {formatBytes(metrics.memory.regions.survivor.max)} + {formatBytes(metrics.memory.regions.survivor.max, true)}
@@ -679,10 +707,14 @@ const MetricsDashboard: React.FC = () => {
最大: - {formatBytes(metrics.memory.regions.metaspace.max)} + {formatBytes(metrics.memory.regions.metaspace.max, true)}