我在 EC2(Cent OS,2.6.35.14,x86_64)上运行服务器,最近我超过了每月 100 万次 I/O 的配额,这很荒谬,因为我的磁盘利用率不应该接近该配额。(我没有运行任何需要大量磁盘访问的服务......甚至任何磁盘访问)
我的第一个想法是启动 iotop,看看是否有任何进程不断地写出到磁盘。iotop 向我展示了一个名为jbd2的进程每分钟不止一次地向磁盘写入数据。
经过一番 谷歌搜索后,问题似乎是内核错误,或者是某个守护进程定期接触磁盘。
我安装了 inotify-tools 并在整个文件系统上启动了 inotifywait;
sudo /usr/local/bin/inotifywait -m -r /!(dev|proc)
Run Code Online (Sandbox Code Playgroud)
这表明 /etc/passwd 正在被打开,访问,然后关闭,每分钟多次。没有我在系统上做任何其他事情!inotify 没有告诉你什么进程在做触摸,但我安装了审计(http://people.redhat.com/sgrubb/audit/),在 /etc/passwd 上设置了一些日志并让它运行一段时间,然后查看日志,但他们告诉我的是它正在被 sudo 访问:(用户名已编辑)
type=SYSCALL msg=audit(10/03/2011 17:48:30.493:260) : arch=x86_64 syscall=open success=yes exit=4 a0=7f809205669a a1=80000 a2=1b6 a3=0 items=1 ppid=6466 pid=6467 auid=**** uid=root gid=**** euid=root suid=root fsuid=root egid=**** sgid=**** fsgid=**** tty=pts0 ses=79 comm=sudo exe=/usr/bin/sudo key=(null)
type=SYSCALL msg=audit(10/03/2011 17:48:30.493:261) : arch=x86_64 syscall=open success=yes exit=4 a0=7f809205669a a1=80000 a2=1b6 a3=0 items=1 ppid=6466 pid=6467 auid=**** uid=root gid=**** euid=root suid=root fsuid=root egid=**** sgid=**** fsgid=**** tty=pts0 ses=79 comm=sudo exe=/usr/bin/sudo key=(null)
type=SYSCALL msg=audit(10/03/2011 17:48:30.488:256) : arch=x86_64 syscall=open success=yes exit=3 a0=7f809205669a a1=80000 a2=1b6 a3=0 items=1 ppid=6441 pid=6466 auid=**** uid=**** gid=**** euid=root suid=root fsuid=root egid=**** sgid=**** fsgid=**** tty=pts0 ses=79 comm=sudo exe=/usr/bin/sudo key=(null)
...
Run Code Online (Sandbox Code Playgroud)
有什么办法可以进一步缩小范围吗?我的 cron 文件中没有任何内容,也没有我能想到的其他服务会导致这种情况:
chkconfig | grep on
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
cgconfig 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cloud-init 0:off 1:off 2:on 3:on 4:on 5:on 6:off
cloud-init-user-scripts 0:off 1:off 2:on 3:on 4:on 5:on 6:off
conman 0:off 1:off 2:off 3:off 4:off 5:off 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
yum-updatesd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Run Code Online (Sandbox Code Playgroud)
当您使用 CentOS 时,您应该能够通过查看/var/log/secure例如了解 sudo 正在做什么
sudo tail /var/log/secure
Run Code Online (Sandbox Code Playgroud)
10 月 4 日 03:45:44 ec2-centos-instance sudo: iain: TTY=pts/0 ; PWD=/home/iain ; 用户=根;命令=/usr/bin/tail /var/log/secure
编辑:更新评论的答案
使用以下方法启用块转储:echo 1 > /proc/sys/vm/block_dump并使用 dmesg 查看它有助于跟踪哪些进程正在访问磁盘。比iotop可靠得多。事实证明,sar 一直在运行,写到 /var/log/sa/saXX 所以我在 cron.d 中禁用了它,一切又好了
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |