pstree 默认不显示内核线程如[nfsd],需加-t选项才能在进程树中呈现;可用ps -eL | grep '[nfsd]'确认数量,pstree -p | grep rpc.nfsd定位启动服务,负载评估须结合nfsstat、sar等工具。

pstree 本身不直接显示内核线程(如 nfsd)的分布与负载,因为它默认只展示用户空间进程树,且 nfsd 是内核线程(kernel threads),在多数 Linux 发行版中以 [nfsd] 形式存在、无命令行参数、无用户属主、不隶属于任何用户进程树——这些特性导致它在默认 pstree 输出中被完全忽略或仅极简显示。
但你可以结合 pstree 的特定选项与辅助命令,间接定位、确认并初步评估 nfsd 内核线程的存在、数量及上下文关系。以下是实用、可操作的方法:
✅ 确认 nfsd 内核线程是否存在及数量
内核线程 nfsd 由 NFS 服务启动后在内核中创建,每个实例对应一个 CPU 核心(通常为 nfsd/0, nfsd/1, …),它们 PID 较小(常 < 100)、状态为 [nfsd]、无 CMD 字段。
运行:
ps -eLo pid,tid,comm,cls,rtprio,pri,nice,pcpu,stat,uid | grep '\[nfsd\]'
或更简洁:
ps -eL | awk '$10 ~ /^\[nfsd\]$/ {print $1,$2,$10,$9}' | sort -n输出类似:
24 24 [nfsd] S 25 25 [nfsd] S 26 26 [nfsd] S 27 27 [nfsd] S
→ 表明当前有 4 个 nfsd 内核线程(即支持最多 4 路并发 NFS 请求处理)。
⚠️ 注意:
pstree默认不显示方括号内的内核线程(如[kthreadd],[nfsd]),除非显式启用-t(threads)选项。
✅ 用 pstree -t 查看含内核线程的完整树(含 nfsd)
从 Linux 3.5+ 开始,pstree 支持 -t 选项显示轻量级进程(LWP)和内核线程(需 psmisc >= 23.0):
pstree -t -p | grep -A2 -B2 nfsd
若系统支持,你可能看到:
systemd(1)─┬─nfsd(24)─┬─[nfsd/0](24)
│ ├─[nfsd/1](25)
│ ├─[nfsd/2](26)
│ └─[nfsd/3](27)→ 这说明 nfsd 线程是 systemd 直接或间接派生的(实际由 rpc.nfsd 用户态程序触发内核模块加载并创建),pstree -t 成功将其纳入树中。
✅ 验证是否支持:
pstree --help 2>&1 | grep -q '\-t' && echo "支持-t"
❌ 若报错或无输出,说明psmisc版本过低,需升级或改用ps -eL替代。
✅ 查看 nfsd 所属服务进程(用户态入口)
虽然 nfsd 自身是内核线程,但它由用户态 rpc.nfsd(或 systemd service nfs-server.service)启动。用 pstree 定位其控制进程:
pstree -p | grep -A5 -B5 nfs
常见输出:
systemd(1)─┬─rpc.nfsd(1234)─┬─nfsd(24)
│ ├─nfsd(25)
│ └─nfsd(26)→ 实际上 rpc.nfsd 是 fork 出子进程后调用 syscall(__NR_nfsd) 创建内核线程;pstree 显示的 nfsd(xxx) 是占位符进程(已转为内核线程,原 PID 保留),因此该树形反映的是“启动关系”,而非真实父子继承(内核线程父 PID 恒为 2 —— kthreadd)。
✅ 评估 nfsd 负载:不能靠 pstree,需配合其他工具
pstree 不提供 CPU、IO、队列深度等负载指标。要评估 NFS 服务压力,应组合使用:
-
nfsstat -s:查看服务器端 NFSv3/v4 RPC 调用统计(rcvcnt,badcalls,netcnt) -
cat /proc/nfsd/threads:显示当前活跃nfsd线程数(需内核支持/proc/nfsd) -
top -H -p $(pgrep -f 'rpc\.nfsd' | head -1):按线程查看rpc.nfsd进程的各 LWP 占用(注意:这不是内核nfsd线程,而是用户态管理线程) -
sar -n NFS 1 5:监控 NFS 服务器请求延迟与吞吐(需sysstat)
✅ 小结:pstree 在 NFS 场景中的合理用法
| 目标 | 是否可用 pstree | 推荐命令 |
|---|---|---|
查看 nfsd 是否运行、有多少个 |
✅(需 -t) |
pstree -t -p \| grep nfsd |
确认 nfsd 由哪个服务启动 |
✅(看父进程) | pstree -p \| grep -A3 rpc.nfsd |
判断 nfsd 当前 CPU 或 IO 负载 |
❌(pstree 不提供) |
nfsstat -s, sar -n NFS, pidstat -t -p $(pgrep rpc.nfsd)
|
| 导出树状结构到文件供分析 | ✅ | pstree -t -p > nfsd-tree.log |
提示:若需长期监控,建议写脚本定期采集
ps -eL \| grep '\[nfsd\]'+nfsstat -s+cat /proc/loadavg,比单靠pstree更有效。
不复杂但容易忽略。


















