測試系統在Linux上的效能發現丟包率極為嚴重,發210000條資料,丟包達110000之巨,丟包率超過50%。同等情形下Windows上測試,僅丟幾條資料。形勢嚴峻,必須解決。考慮可能是因為協議棧Buffer太低所致,於是先看看預設情況:
sysctl -a |grep net.core
發現
net.core.rmem_max = 131071
net.core.rmem_default = 112640
修改吧,變大一點,變成10M,然後reboot(應該重啟某個服務即可)
然後查網卡收包情況:
netstat -su
結果如下:
Udp:
97690 packets received
112310 packets to unknown port received.
0 packet receive errors
20 packets sent
探索資料在網卡就丟了,判斷可能是防火牆引起的,於是執行命令:
iptables -L
結果如下:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
證明iptables啟動,於是停止防火牆:
service iptables stop
這個命令即時生效,開啟防火牆的命令:
service iptables start
如果要徹底關閉防火牆,則需要重啟後生效
開啟: chkconfig iptables on
關閉: chkconfig iptables off
在開啟了防火牆時,做如下設定,開啟相關連接埠,
修改/etc/sysconfig/iptables 檔案,添加以下內容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
重新測試,沒丟一條資料。