郁闷,折腾了这么久,才发现居然是双工的问题
这个机器最早刚拿到机房的时候,发现不知道为啥,启动时候总是协商成 10M 半双工,但是交换机和网卡显然都是 100M 的,于是只好在 rc.local 里面加了一条 mii-tool -F 100baseTx-FD eth0 , 这么一直用了一年多也没有太大问题。后来因为一些原因,这个机器 down 了又有一年多,再起来以后就总觉得这个机器网络慢,在 shell 上面执行比较大输出的操作,都会一卡一卡的,一直没搞明白是为什么。这段时间为了解决访问 blog 慢的问题,对 web 进行了不少优化,gzip, expire 啥的都设了一遍,有一点提升,但是没有特别明显的效果。因为没有太多时间,所以就懒得管了。
今天稍微清闲了一点,就仔细研究了下这个问题,发现从同一内网用 ab 压 17K 的静态文件最好情况下只能到 40 个每秒左右,大文件则是只能到 1.8MB/s,这明显有问题。但是 ping 也看不到什么丢包。
习惯性的看 dmesg 的时候,发现网卡每次启动时候还是会协商成 10M 半双工,这就奇怪了,机器经过这两次倒腾,机箱换了,网卡也换了,网线也换了,交换机上网口也换了,为啥还是 10M 半双工,莫非这个交换机其实只能上半双工?于是 mii-tool 重新调整为 10M 半双工,马上 shell 就不卡了。
但是 10M 半双工虽然 shell 不卡,带宽实在比较不能够接受,于是尝试了一下 100M 半双工,貌似效果很好, HTTP 大文件同一内网能到 8MB/s, ab 那个 17K 的静态文件可以压到 400 个左右,这样看起来就还算凑合了,虽然总的来说不是很高,但对这个破机器,还是可以接受的结果。
最后的结果就是 rc.local 里面改了一行
mii-tool -F 100baseTx-HD eth0
至于为什么不能上百兆全双工,这问题也懒得研究了,先这样用着好了,我要求不高。
另,这机器以前的网卡是 3C905B(3c59x),后来用了几天 8139(8139too), 现在是 DFE-530TX(via_rhine),都不是什么特别好的网卡,不过都协商成 10M 半双工也真是够那个的了。。