2016-02-03 48 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/