我有一台在Debian Lenny下运行的Linux服务器,带有4Go内存.
它运行不多,只是:
> Postfix / spamassassin(守护进程模式)
> Bind9
> KVM(一个客人 – 1个RAM的RAM)
每天正好在UTC时间3:05,服务器几乎完全落到了底层的所有内存.之后,我有超过2G的缓冲区使用并且从未清理过(除非我手动告诉内核删除缓存).
我在网上搜索了很多,在开始时,我虽然这是由于NFS缓冲区的使用.我使用gzip / tar在NFS共享驱动器上进行备份,备份发生在3:05.
但是,我现在处于一个非常奇怪的情况,因为我在1:40移动了备份任务(它在2分钟内完成)并且我仍然在3:05丢弃所有RAM.
在我的日志中,没有什么特别的,除了在03:05:01,cron以root身份打开会话并立即在03:05:02关闭它而不做任何事情.当然,cron已经重新启动,我检查了任务的时间 – 再次,没有什么特别的.
知道为什么会这样吗?或者,如何跟踪使用所有缓冲区的内容?
编辑:服务器以UTC格式运行,此处所有时间均为UTC.它没有运行任何NFS服务器,我没有安装mlocate或slocate.对于crontab,每日和用户crontabs,在那个小时什么也没做.
这是关于cron的日志中有趣的部分:
auth.log-20110501:May 1 03:05:01 SRV CRON[15914]: pam_unix(cron:session): session opened for user root by (uid=0)
auth.log-20110501:May 1 03:05:01 SRV CRON[15914]: pam_unix(cron:session): session closed for user root
syslog-20110501:May 1 03:05:01 SRV /USR/SBIN/CRON[15915]: (root) CMD ([ -x /usr/lib/sysstat/sa1 ] && { [ -r “$DEFAULT” ] && . “$DEFAULT” ; [ “$ENABLED” = “true” ] && exec /usr/lib/sysstat/sa1 $SA1_OPTIONS 1 1 ; })
解决方法:
您的服务器是否以UTC格式运行?大多数会在当地时区运行,我猜你的是UTC 1(MET或CET).我问,因为我们需要知道crontab中使用了什么时区,例如也许3.05在crontab中没有被称为3.05.
执行大量磁盘访问的常见任务包括makewhatis / man-db和slocate / mlocate.仔细检查它们是否在3.05附近运行,例如看看/ etc / crontab和/etc/cron.daily.检查/ var / spool / cron中的用户cron选项卡.
有两种方法我可以想到在没有cron日志的情况下弄清楚3.05的运行情况.
第一个是auditctl,使用起来有点痛苦.
根据手册页,我会尝试类似于:
$sudo auditctl -a entry,always -S open -S creat \
-S read -S readv -S write -S writev -S sendfile \
-S fork -S clone -S execve -k 305
然后设置审计
$sudo aureport -s -i -ts 03:04 -te 03:06
当您在3.05之后登录系统时检查发生了什么.
第二个是简单的ps.只需编写一个脚本来运行ps几次,并安排它运行在3.04.
ps的许多方面在这里都很有用,例如,wchan和status字段可以查看正在执行I / O和pcpu的进程,以查看当时哪些进程使用的CPU最多.当然,任何未在3.04.59列表中出现但确实出现在3.05.01或之后不久的过程也是一个明显的嫌疑人.
标签:linux,memory,nfs
来源: https://codeday.me/bug/20190812/1642767.html