我可以访问我所在机构的 Ubuntu Linux 节点。这些节点在组之间共享,但通常我是唯一使用该特定节点的人。
我正在该节点上的所有 8 个 CPU 上并行运行计算。我的计算正在运行,但是当我使用 查看活动进程时top
,我看到一个附加进程,上面写着 userman
和 command mandb
。根据 的说法,这个mandb
命令似乎每次我查看时都会运行top
,并且它似乎占用了相当可观的 CPU 功率 ( 6 %CPU
) 和内存 ( ) 。2.5 %MEM
top
当我在互联网上查找时,似乎是:
mandb
用于初始化或手动更新通常由人维护的索引数据库缓存。
那么为什么mandb
一直在这个节点上运行呢? (根据top
其他节点的说法,我在我的机构集群内的其他节点上没有这个问题。)为什么mandb
需要一直运行,因为我是不是目前正在查看手册?
此进程是否可能是我可以安全终止的幻影进程kill
?
答案1
mandb
连续运行是不正常的。通常mandb
每天运行一次计划任务作业,执行维护任务,例如更新已安装手册页的索引以及构建或修剪格式化手册页的缓存。日常作业应该在几秒钟内运行,如果您有大量手册页和缓慢的磁盘,则可能需要几分钟。如果作业运行的时间超过这个时间,则说明出现了问题。
6% CPU 并不高,但该进程可能正在执行磁盘 I/O。集群节点上 2.5% 的内存听起来很高。很可能该作业配置错误并在不应该的位置查找,或者程序中存在错误mandb
,或者硬件故障导致mandb
卡住。
/etc/crontab
您可以在或中观看 cron 脚本/etc/cron.*/*
(确切位置取决于发行版;/etc/cron.daily/man-db
并且/etc/cron.weekly/man-db
是可能的位置)。您可以mandb
通过更仔细地查看进程来了解调用的内容:运行pstree | less
并搜索mandb
进程。运行ps ww 12345
(其中 12345 是违规进程的 PID)将显示完整的命令行。
您可能可以自行诊断此问题,但如果没有 root 权限则无法修复。如果您确实拥有 root 权限,则可以安全地终止该mandb
进程(使用命令sudo pkill mandb
或su -c 'pkill mandb'
,具体取决于您成为 root 的方式)。无论如何,请联系您的系统管理员并解释症状。提供所有可以提供的信息(例如调用了什么程序mandb
以及使用什么参数)。
答案2
我检查了 cron 脚本,它只是一个更新 man 索引、加快手册搜索速度的命令,每天运行,你可以安全地杀死它。
你不喜欢它,只需禁用它chmod -x /etc/cron.daily/man-db
答案3
这是一个 Heisenbug,可能已在最新版本的 mandb 中修复。它与损坏的联机帮助页、文件系统遍历顺序以及 mandb 的增量重建变成非常缓慢的完整重建(大约 1500 万个页面错误,这需要几分钟的旋转 rust)有关。
如果您想排除故障,请运行:
sudo mandb --no-purge --debug
--create
并且无论有没有都不要运行 mandb --no-purge
。然后确保您拥有最新版本并报告 cjwatson 可以看到的错误。
另一方面,如果您只是想解决问题,请运行:
echo 'man-db man-db/auto-update boolean false' |sudo debconf-set-selections
这将禁用 man-db cronjob(每天运行)和 dpkg 触发器(在安装软件包时运行)。