1.45
This commit is contained in:
parent
70e6e0cac6
commit
d9b8142028
@ -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 = () => {
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span className="text-muted-foreground">最大:</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.eden.max)}</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.eden.max, true)}</span>
|
||||
</div>
|
||||
<Progress
|
||||
value={(metrics.memory.regions.eden.used / metrics.memory.regions.eden.max) * 100}
|
||||
value={calcMemoryPercent(
|
||||
metrics.memory.regions.eden.used,
|
||||
metrics.memory.regions.eden.max,
|
||||
metrics.memory.regions.eden.committed
|
||||
)}
|
||||
className="h-1 mt-2"
|
||||
/>
|
||||
</div>
|
||||
@ -629,10 +649,14 @@ const MetricsDashboard: React.FC = () => {
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span className="text-muted-foreground">最大:</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.oldGen.max)}</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.oldGen.max, true)}</span>
|
||||
</div>
|
||||
<Progress
|
||||
value={(metrics.memory.regions.oldGen.used / metrics.memory.regions.oldGen.max) * 100}
|
||||
value={calcMemoryPercent(
|
||||
metrics.memory.regions.oldGen.used,
|
||||
metrics.memory.regions.oldGen.max,
|
||||
metrics.memory.regions.oldGen.committed
|
||||
)}
|
||||
className="h-1 mt-2"
|
||||
/>
|
||||
</div>
|
||||
@ -654,10 +678,14 @@ const MetricsDashboard: React.FC = () => {
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span className="text-muted-foreground">最大:</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.survivor.max)}</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.survivor.max, true)}</span>
|
||||
</div>
|
||||
<Progress
|
||||
value={(metrics.memory.regions.survivor.used / metrics.memory.regions.survivor.max) * 100}
|
||||
value={calcMemoryPercent(
|
||||
metrics.memory.regions.survivor.used,
|
||||
metrics.memory.regions.survivor.max,
|
||||
metrics.memory.regions.survivor.committed
|
||||
)}
|
||||
className="h-1 mt-2"
|
||||
/>
|
||||
</div>
|
||||
@ -679,10 +707,14 @@ const MetricsDashboard: React.FC = () => {
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span className="text-muted-foreground">最大:</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.metaspace.max)}</span>
|
||||
<span className="font-medium">{formatBytes(metrics.memory.regions.metaspace.max, true)}</span>
|
||||
</div>
|
||||
<Progress
|
||||
value={(metrics.memory.regions.metaspace.used / metrics.memory.regions.metaspace.max) * 100}
|
||||
value={calcMemoryPercent(
|
||||
metrics.memory.regions.metaspace.used,
|
||||
metrics.memory.regions.metaspace.max,
|
||||
metrics.memory.regions.metaspace.committed
|
||||
)}
|
||||
className="h-1 mt-2"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user