skypeを立ち上げると
kern.maxfiles limit exceeded by uid 1102, please see tuning(7).
こんなメッセージがでるので、lsofしてみたらchromeの方がいっぱいファイルディスクリプタを消費してた。
lsofの出力をみてると
syslogd 1392 root 10w VBAD (revoked)
のようなのがちらほら出てくる。たしかにrevoke(2)というシステムコールはあるが、プログラムのソースコードをみてもrevokeを呼んでいるようにはみえない。
でカーネルの方をみるとVBAD(これは無効なvnodeをあらわす)を代入しているところがみつかるが、どういうパスで実行されるかまでは読まず。
どうやら端末からプログラムを起動したあと、その端末を閉じるとVBADになるっぽいことがかわって、それでよしということにした。
シェルから sleep 100000 & を実行してみたところ:
% lsof -p 26797 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sleep 26797 koie cwd VDIR 41,3942383680 576 3 /home/koie sleep 26797 koie rtd VDIR 0,136 1024 2 / sleep 26797 koie txt VREG 0,136 5160 49732 /bin/sleep sleep 26797 koie txt VREG 0,136 248568 49933 /libexec/ld-elf.so.1 sleep 26797 koie txt VREG 0,136 1274032 16717 /lib/libc.so.7 sleep 26797 koie 0u VCHR 0,191 0t79 191 /dev/ttyp3 sleep 26797 koie 1u VCHR 0,191 0t79 191 /dev/ttyp3 sleep 26797 koie 2u VCHR 0,191 0t79 191 /dev/ttyp3
sleepは生かしたままシェルを終了→端末を閉じたところ:
% lsof -p 26797 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sleep 26797 koie cwd VDIR 41,3942383680 576 3 /home/koie sleep 26797 koie rtd VDIR 0,136 1024 2 / sleep 26797 koie txt VREG 0,136 5160 49732 /bin/sleep sleep 26797 koie txt VREG 0,136 248568 49933 /libexec/ld-elf.so.1 sleep 26797 koie txt VREG 0,136 1274032 16717 /lib/libc.so.7 sleep 26797 koie 0u VBAD (revoked) sleep 26797 koie 1u VBAD (revoked) sleep 26797 koie 2u VBAD (revoked)
強制umountでもVBADになるようだ。
てきとうにファイルをオープンした状態:
% lsof -p 27317 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cat 27317 koie cwd VDIR 206,638058647 511 3 /tmp cat 27317 koie rtd VDIR 0,136 1024 2 / cat 27317 koie txt VREG 0,136 11072 49932 /bin/cat cat 27317 koie txt VREG 0,136 248568 49933 /libexec/ld-elf.so.1 cat 27317 koie txt VREG 0,136 1274032 16717 /lib/libc.so.7 cat 27317 koie 0u VCHR 0,178 0t4803748 178 /dev/ttyp1 cat 27317 koie 1w VREG 207,926285839 0 61670 /usr/src (tank/usr/src) cat 27317 koie 2u VCHR 0,178 0t4803748 178 /dev/ttyp1
umount -fで強制umountした状態:
% lsof -p 27317 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cat 27317 koie cwd VDIR 206,638058647 511 3 /tmp cat 27317 koie rtd VDIR 0,136 1024 2 / cat 27317 koie txt VREG 0,136 11072 49932 /bin/cat cat 27317 koie txt VREG 0,136 248568 49933 /libexec/ld-elf.so.1 cat 27317 koie txt VREG 0,136 1274032 16717 /lib/libc.so.7 cat 27317 koie 0u VCHR 0,178 0t4803748 178 /dev/ttyp1 cat 27317 koie 1w VBAD (revoked) cat 27317 koie 2u VCHR 0,178 0t4803748 178 /dev/ttyp1
再マウントした状態(revokedがもとにもどったりはしない):
% lsof -p 27317 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cat 27317 koie cwd VDIR 206,638058647 511 3 /tmp cat 27317 koie rtd VDIR 0,136 1024 2 / pcat 27317 koie txt VREG 0,136 11072 49932 /bin/cat cat 27317 koie txt VREG 0,136 248568 49933 /libexec/ld-elf.so.1 cat 27317 koie txt VREG 0,136 1274032 16717 /lib/libc.so.7 cat 27317 koie 0u VCHR 0,178 0t4803748 178 /dev/ttyp1 cat 27317 koie 1w VBAD (revoked) cat 27317 koie 2u VCHR 0,178 0t4803748 178 /dev/ttyp1
その状態でwriteするとエラーになる(EIOっぽい):
cat: stdout: Input/output error

2011/10/12 15:49:57
sof | sed '/cwd/d;/rtd/d;' | awk '{print $1}' | sort | uniq -c | sort -n
sof | sed '/cwd/d;/rtd/d;' | awk '{print $1}' | sort | uniq -c | sort -n
242 httpd
666 console-k
1890 skype
9822 chrome

2011/10/12 15:55:01
lsof | sed -n '/^chrome/{/txt/d;p;}' | awk '{print $5}' | sort | uniq -c | sort -n
lsof | sed -n '/^chrome/{/txt/d;p;}' | awk '{print $5}' | sort | uniq -c | sort -n
38 IPv4
100 VCHR
106 VBAD
298 KQUEUE
555 PIPE...

2011/10/12 16:03:22
chromiumをgrepしてみると、
chromiumをgrepしてみると、
find . -name "*.c" -print -o -name "*.cc" -print | xargs grep revoke | sed 's|//.*$||' | less
SSLの証明書のrevokeしかでてこない。