${esc(I.model||
document.getElementById('sub').textContent=`共 ${j.total} 个进程,显示占用最高的前 ${j.items.length} 个(进程CPU为单进程占用,单核满=100%,16核满=1600%,进程之和÷16≈整机占用)`;
cpuAdvise();cpuSensor();
renderHeader();
-B.innerHTML=j.items.map(p=>`
`;
const D=j.detail||{},H2=j.hw||{},DM=H2.dimms||[];
@@ -167,14 +167,14 @@ document.getElementById('meminfo').innerHTML=`
物理 ${fmtB(H
+`
占用拆解:
${row('空闲 MemFree',fmtB(D.MemFree))+row('可用 MemAvailable',fmtB(D.MemAvailable))+row('缓冲 Buffers',fmtB(D.Buffers))+row('缓存 Cached',fmtB(D.Cached))+row('Swap缓存',fmtB(D.SwapCached))+row('匿名页 AnonPages',fmtB(D.AnonPages))+row('映射 Mapped',fmtB(D.Mapped))+row('共享 Shmem',fmtB(D.Shmem))+row('Slab',fmtB(D.Slab))+row('可回收',fmtB(D.SReclaimable))+row('不可回收',fmtB(D.SUnreclaim))+row('页表',fmtB(D.PageTables))+row('内核栈',fmtB(D.KernelStack))+row('已提交',fmtB(D.Committed_AS))+row('提交上限',fmtB(D.CommitLimit))+row('脏页',fmtB(D.Dirty))}
`;
document.getElementById('sub').textContent=`按内存占用排序,前 ${j.items.length} 个进程`;
renderHeader();
-B.innerHTML=j.items.map(p=>`
| ${esc(p.name)} | ${fmtB(p.rss)} | ${fmtB(p.uss)} | ${fmtB(p.swap)} | ${p.pid} | ${esc(p.desc)} | ${esc(p.user)} | ${p.status} | |
`).join('');
+renderBody();
}else if(cur==='disk'){
let tot=0,used=0;j.parts.forEach(p=>{tot+=p.total;used+=p.used});
const pct=tot?Math.round(used/tot*100):0;
S.innerHTML=`
已用 / 总共
${fmtB(used)} / ${fmtB(tot)}
读 / 写累计
${fmtB(j.io.read||0)} / ${fmtB(j.io.write||0)}
`;
document.getElementById('sub').textContent=`${j.parts.length} 个挂载点,下表按 IO 占用排序`;
renderHeader();
-B.innerHTML=j.items.map(p=>`
| ${esc(p.name)} | ${fmtB(p.io_r)} | ${fmtB(p.io_w)} | ${p.pid} | ${esc(p.user)} | ${p.status} | |
`).join('');
+renderBody();
document.getElementById('disks').innerHTML=j.parts.map(p=>`
${esc(p.mount)} ${esc(p.device)} ${esc(p.fstype)}
${fmtB(p.used)} / ${fmtB(p.total)} (${p.percent}%) · 可用 ${fmtB(p.free)}
`).join('');
const W=j.hw||{},DS=W.disks||[],AR=W.arrays||[],EX=W.extra||{};
const drow=(k,v)=>`
${k} ${v}`;
@@ -188,7 +188,7 @@ const up=j.nics.reduce((a,n)=>a+n.up,0),down=j.nics.reduce((a,n)=>a+n.down,0);
S.innerHTML=`
累计接收
${fmtB(j.total_recv||0)}
累计发送
${fmtB(j.total_sent||0)}
`;
document.getElementById('sub').textContent=j.nics.map(n=>`${n.nic}: ↑${fmtR(n.up)} ↓${fmtR(n.down)}`).join(' · ')||'无网卡数据';
renderHeader();
-B.innerHTML=j.items.map(p=>`
| ${esc(p.name)} | ${p.conns} | ${p.pid} | ${esc(p.desc)} | ${esc(p.user)} | ${p.status} | |
`).join('');
+renderBody();
document.getElementById('netextra').innerHTML=`
TCP连接
| 进程名 | 本地地址 | 远程地址 | 地址族 | PID | 状态 |
${(j.tcp||[]).map(c=>`| ${esc(c.name)} | ${esc(c.laddr)} | ${esc(c.raddr)} | ${esc(c.family)} | ${c.pid||''} | ${esc(c.status)} |
`).join('')}
侦听端口
| 进程名 | 监听地址 | 端口 | 地址族 | 防火墙 | PID | 协议 |
${(j.listen||[]).map(c=>`| ${esc(c.name)} | ${esc(c.laddr)} | ${c.port} | ${esc(c.family)} | 不放行 | ${c.pid||''} | ${esc(c.proto)} |
`).join('')}
`;
const NW=j.hw||{},NN=NW.nics||[];
const nrow=(k,v)=>`
${k} ${v}`;