2016-02-03 47 views
1

我們正在對Tornado進行一些性能測試。這是代碼龍捲風在OSX上失敗,但在Ubuntu上工作

import tornado.websocket 
import tornado.ioloop 
import tornado.web 

class TestTornado(tornado.websocket.WebSocketHandler): 
    def open(self): 
     self.set_nodelay(True) 
     pass 

    def on_message(self, message): 
     self.write_message(message) 
     self.close() 

    def on_close(self): 
     pass 

def main(): 
    applicationList = [] 
    applicationList.append((r"/ws", TestTornado)) 

    application = tornado.web.Application(applicationList) 
    application.listen(8888) 

    myIOLoopInstance = tornado.ioloop.IOLoop.instance() 
    myIOLoopInstance.start() 

if __name__ == "__main__": 
    main() 

,我們正與thor --amount 10000 --messages 100 ws://localhost:8888/ws

然而測試,在OS X,它是經過7000個連接或多或少總是失敗,但在Ubuntu沒有錯誤可言。注意我正在談論連接,而不是關於文件,所以這個問題與OS X可以處理的最大打開文件無關(它已經設置爲1000000)。

那麼......爲什麼會發生這種情況呢?是否有任何配置可以在OS X上更改以使其正常工作?

+0

這可能在http://serverfault.com屬於代替 –

+0

你說 「沒有」 - 不龍捲風拋出一個異常?你能特別告訴我們症狀是什麼嗎? –

+0

@ A.JesseJiryuDavis只需在連接7000個連接時停止處理連接。一段時間後,壓力測試結束並顯示所有人都「失敗」 – yzT

回答

0

這是OSX本身的問題。這些參數應該有所幫助,但我們不再在OS X上進行測試,因此不確定。

kern.ipc.maxsockbuf=4194304 
kern.ipc.somaxconn=2048 
kern.ipc.nmbclusters=2048 
net.inet.tcp.rfc1323=1 
net.inet.tcp.win_scale_factor=4 
net.inet.tcp.sockthreshold=16 
net.inet.tcp.sendspace=1042560 
net.inet.tcp.recvspace=1042560 
net.inet.tcp.mssdflt=1448 
net.inet.tcp.v6mssdflt=1428 
net.inet.tcp.msl=15000 
net.inet.tcp.always_keepalive=0 
net.inet.tcp.delayed_ack=3 
net.inet.tcp.slowstart_flightsize=20 
net.inet.tcp.local_slowstart_flightsize=20 
net.inet.tcp.blackhole=2 
net.inet.udp.blackhole=1 
net.inet.icmp.icmplim=50 

來源:https://rolande.wordpress.com/2010/12/30/performance-tuning-the-network-stack-on-mac-osx-10-6/