有时在线上服务器上可以看到log用户使用的telnet进程占用了大量的CPU资源,这两天又遇到这样的事情,所有就查了一下。这个场景可以在CentOS 4.8,5.8上都得到重现。
# ssh 127.0.0.1 “telnet test1.me.net 80”
root@127.0.0.1’s password:
Trying 10.253.85.208…
Connected to test1.me.net (10.23.85.208).
Escape character is ‘^]’.
Killed by signal 2.
这个时候top可以看到telnet经常耗CPU 100%。
后来自己在debian下测试发现没有这个问题,debian下的telnet客户端其实也是 netkit-telnet-0.17。但redhat bugzilla网站也有这样的问题,另外我也试了inetutils(1.6,1.7,1.8, 1.9)里面的telnet客户端也没有发现这样的情况。那么比较明显的是可能是debian对 netkit-telnet打了一些patch,在http://packages.debian.org/squeeze/telnet上可以看到确实有一个patch的,然后我就先把netkit-telnet_0.17.orig.tar.gz 这个包下载下来在centos上编译(很多头文件都没有include,还得自己根据make的报错一个一个添加),编译出来后的telnet确实会出现相同的问题,即占用CPU 100%,strace -p PID后可以看到是进入死循环。把debian的patch打上去后,一下顺利编译,而且占用CPU 100%的情况也消失了,看了下那个patch改动还是很多的。