socks5 運行幾個小時後 端口10808不通了,ss5服務正常

SS5壓力測試

網絡監控方法


dstat命令,所代表的receive/send,貌似receive是接收的字節數,*8是帶寬,而send並不是機器對外網發送的字節數,故不用它判斷收發流量;

iftop命令,在實驗場景下(每秒大約4個baidu首頁請求,接收流量大約138KB*4),顯示的發送和接收的流量,和程序計算的每秒發送接收流量基本一致,故採用這個命令,判斷網絡流量。


SS5日誌


1、STARTED和TERMINATED是配對出現的,代表一次連接的開始和結束

[08/Apr/2015:19:46:57 CST] [1035835136] 10.10.96.106 "" "CONNECT" STARTED 0 0 0 (10.10.96.106:55389 -> 220.181.112.244:80)

[08/Apr/2015:19:48:03 CST] [1035835136] 10.10.96.106 "" "CONNECT" TERMINATED 23189 352 66 (10.10.96.106:55389 -> 220.181.112.244:80)


2、不是每一次代理請求都會被記錄下來

當我們訪問公網時,由於一次Socket請求(Client:IP+Port和Server:IP+Port)會延續較長時間,所以基本不會在1秒內被複用,所以基本都能記錄日誌;

當我們測試訪問一個內網URL時,1秒內完成幾百次成功的Socket請求,很多被複用,對於1秒內“Client:IP+Port和Server:IP+Port”相同的Socket,SS5認爲是一個,只有1行日誌;

這樣,可以解釋,訪問內網URL時,幾千個成功的請求,只有幾百行日誌的場景。


以上兩種日誌場景,我們都認爲是正常的。

3、Socks method unknown or bad request

telnet 1080端口,輸入字符;或者F5心跳檢測1080端口,都會導致這個日誌不斷報出。這個應該通過更好的配置過濾掉。


性能指標


大併發情況下,Socket連接沒有正常及時釋放,或者到達臨界值,如下錯誤報出。


日誌會報如下錯誤(刷屏):

[08/Apr/2015:16:06:23 CST] [0] [ERRO] $S5ServerAccept$: (Too many open files).

[08/Apr/2015:16:06:23 CST] [1916823296] [ERRO] $S5GetClientInfo$: (Bad file descriptor).


程序會報如下錯誤:

java.net.SocketException: SOCKS server general failure
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:526)
        at java.net.Socket.connect(Socket.java:529)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:525)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:208)
        at sun.net.www.http.HttpClient.New(HttpClient.java:291)
        at sun.net.www.http.HttpClient.New(HttpClient.java:310)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:966)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
        at cl.an.HttpConn.run(HttpSocketPressTest.java:188)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:662)


性能測試結果



Socket連接數-正常臨界值(約值)Socket連接數-異常臨界值(約值)到達異常臨界值後
openfiles -1024450550報上面的Bug,只保留200個線程,35秒後恢復正常
openfiles -409620002100-2500第一種情況:
ss5異常停止,不能恢復:service ss5 status,可以看到:
ss5 已死,但是 subsys 被鎖;有時還會報:*** glibc detected *** /usr/sbin/ss5: free(): invalid pointer: 0x00007f693c0207e0 ***
第二種情況:
報上面的Too many open files,只保留200個線程,10秒後恢復;
openfiles -65536結果和openfiles -4096類似


根據我們的測試結果,可以認爲虛擬機10.100.140.85(4個CPU、6G內存),最大支持2000併發。

官網的性能指標是:IBM X360,支持2500併發數。

查看Socket連接數命令:netstat -napo | grep 1080 | wc -l

查看修改最大同時打開文件數命令:vim /etc/security/limits.conf ,需要新開一個終端,ulimit -n,確認生效了,service ss5 restart,纔會在ss5中生生效。

關於這個值,很多公司這樣設置:


[plain] view plain copy

  1. *                soft    nofile          1000000  

  2. *                hard    nofile          1000000  

  3. *                soft    core            1048576  

  4. *                hard    core            1048576  




參考網址:

http://www.codesky.net/article/201105/161796.html

http://www.justwinit.cn/post/6482/

http://blog.csdn.net/leili0806/article/details/7534985


壓測結果


訪問www.baidu.com(頁面大小:135KB)


1、囿於帶寬限制(實測、搶公網帶寬,只能搶到1.5M-2M左右),所以,平均每秒,只可能有10-20個成功的Http請求返回。

2、會報java.net.SocketTimeoutException: Read timed out:這是因爲網絡帶寬原因,Timeout時間內沒有從流中讀取完成數據所致的。這是正常的,網絡原因,用不用Socket5代理都有這個問題。

3、會報java.net.ConnectException: Connection timed out: connect:也是網絡原因,Timeout時間內,沒有連接遠程服務器成功。這是正常的,網絡原因,用不用Socket5代理都有這個問題。

4、會報java.net.SocketException: Connection reset:懷疑是遠程服務器的原因。

5、測試截圖如下:

iftop:


dstat:


6、測試過程中,watch -n1 -d 'netstat -an | grep 1080',完全正常,SS5服務本身沒有任何壓力。

7、測試結果:

a、3個機器各開100個併發,成功率分別是:85%、65%、67%,失敗的原因基本是Read timee out,即30秒不能完全從網絡輸入流中讀取完成所有返回數據。

b、1個機器100個併發,成功率大約是98%。


訪問內容URL


可以跑帶寬大約50-60M,平均每秒250個成功返回,成功率100%,截圖如下:

iftop:


dstat:


結論

SS5服務本身能承受巨大壓力,調優ulimit -n後,大約支撐2000併發。

  • SS5服務,帶寬足夠,請求的文件越小,網絡越好,就能支持更多的成功返回。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章