最近基于socket.io写了个消息服务,使用websocket-bench 在进行压力测试
websocket-bench -a 5000 -c 500 http://ip:9080
发现只要连接超过1000多点,就会失败:
Launch bench with 5000 total connection, 500 concurent connection 0 message(s) send by client 1 worker(s) WS server : socket.io #### steps report #### ┌────┬────── ┬─── ┬───────┐ │ Number │ Connections │ Errors │ Duration(ms) │ ├────┼────── ┼────┼───────┤ │ 500 │ 500 │ 0 │ 1787 │ ├────┼── ────┼────┼───────┤ │ 1000 │ 500 │ 0 │ 2609 │ ├────┼── ────┼────┼───────┤ │ 1500 │ 0 │ 500 │ 2610 │ ├────┼───── ─┼────┼───────┤ │ 2000 │ 13 │ 487 │ 1609 │ ├────┼ ──────┼────┼───────┤ │ 2500 │ 0 │ 500 │ 1114 │ ├────┼──── ──┼────┼───────┤ │ 3000 │ 0 │ 500 │ 1135 │ ├────┼─ ─────┼────┼───────┤ │ 3500 │ 0 │ 500 │ 634 │ ├────┼──── ──┼────┼───────┤ │ 4000 │ 0 │ 500 │ 597 │ ├────┼── ────┼────┼───────┤ │ 4500 │ 0 │ 500 │ 1119 │ ├────┼─── ───┼────┼───────┤ │ 5000 │ 0 │ 500 │ 618 │ └────┴──── ──┴────┴───────┘ #### total report #### ┌────┬────── ┬────┬───────┬───────┬───────┐ │ Number │ Connections │ Errors │ Message Send │ Message Fail │ Duration(ms) │ ├────┼──── ──┼────┼───────┼───────┼───────┤ │ 5000 │ 1013 │ 3987 │ 0 │ 0 │ 9627 │ └────┴─── ───┴────┴───────┴───────┴───────┘
为什么会是1000多点这个数?websocket-bench 的README.md文档也特别提醒:
Tip: You may find it useful to increase the maximum number of open file descriptors on your system during testing: ulimit -n 60000
ulimit 有什么特殊作用?网上搜到这篇文章 通过ulimit改善系统性能 ,原来是系统默认的文件打开数影响了连接数 ,通过命令 ulimit -a 可以看到:
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 31107 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 31107 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
open files 为 1024 大概明白为什么socket连接只能有1000多点,使用 ulimit -n 60000来调整可打开文件数,再进行测试,连接数果然就正常了
题外话:socket长连接保持着“文件”(Linux上一切都可以看成是文件)被打开,所以1024的文件连接数很快被耗尽,虽然websocket-bench 文档中也提到ulimit -n 参数调整,但是对操作系统性能类的参数了解很少,没明白什么意思,就无视了,等发现问题的时候,猜可能是该参数影响了性能,才去查资料,所以说专业的事情还真得专业的人来解决,主机工程师或者性能测试人员对这类的参数也许就比较熟悉,知道该类参数的调整,程序员碰到可能真得一头雾水,现在明白为什么高校的计算机专业需要开设操作系统的课程了,这才是基础,虽然学的也是一头雾水^_^
相关推荐
socket.io,socket.io-client 用于java或android连接nodejs websocket
session.socket.io, 在 socket.io 中,表示/连接会话 session.socket.io ( SessionSockets ) 这个小模块简化了 socket.io 使用express或者连接中间件的http会话的使用。 它没有依赖项,可以使用任何与表示或者连接...
使用到JS+socket.io+WebRTC+nodejs+express构建远程实时视频聊天功能,实现浏览器对浏览器之间通过socket建立连接,再通过WebRTC进行流式传输
monitor.io, socket.io的远程监视和调试 monitor.io简单的远程监控和调试中间件 monitor.io 是作为远程服务器运行的node.js的MODULE,它提供远程客户端控制和有关连接到一个 socket.io 实例的套接字的信息。...
Vue-Socket.io, vuejs的socket.io 实现 Vue-Socket.io Vuejs 2和Vuex的socket.io 实现安装npm install vue-socket.io --save用法配置从URL字符串自动连接import V
测试Socket.IO连接的速度 ##入门 使用git clone git://github.com/joe-zim-javascript-blog/Socket.IO-Test.git将这个存储git clone git://github.com/joe-zim-javascript-blog/Socket.IO-Test.git到您的计算机上 ...
socket.io实现简单的双向通信聊天功能
socket.io --save// yarn add @hyoga/uni-socket.io版本选择使用本插件,请注意插件版本与服务端 socket.io 版本要匹配,否则将会出现无法连接服务器的问题。uni-socket 版本服务端 socket.io 版本1.x2.x2.x3.x3.x4....
Socket.IO C ++客户端 通过使用C ++编写,此客户端可在多个不同的平台上工作。 文件夹包含一个iPhone,QT和Console示例聊天客户端! 它取决于 ,并受启发。 相容性表 C ++客户端版本 Socket.IO服务器版本 1.x / 2.x...
Vue-Socket.io是Vuejs的socket.io集成,易于使用,支持Vuex和组件级套接字使用者管理 演示版 您在寻找旧的文档吗? :rocket: 安装 npm install vue-socket.io --save 使用连接字符串 import Vue from 'vue' import ...
本项目是一个利用nodejs.socket.io实先的多人会议画板功能。实现会议同步,插入图片,插入线条,更换背景色,和移动端兼容等。若有不足之处望批评。谢谢
该库能够连接到 Socket.IO 服务器,然后发送和接收消息。 这个项目在 Socket.IO 0.8 之后没有经过任何测试。 用法 确保安装了 boost 库。 在您的项目中包含 websocket++、rapidjson 和socket_io_client.cpp 。 ...
Socket.IO Java 这是从移植的Java Socket.IO服务器库。 注意此库将遵循从版本3开始的JS库的主要版本。 另请参见: 特征 该库支持JS服务器执行的所有功能,包括事件,选项和升级传输。 文献资料 完整的文档可以在...
socket.io-rabbitmq socket.io 适配器实现。 安装 $ npm install socket.io-rabbitmq 用法 var io = require ( 'socket.io' ) ( 3000 ) ; var rabbitmq = require ( 'socket.io-rabbitmq' ) ; io . adapter ( ...
最近公司的一个vue项目用到了vue-socket.io来处理socket数据传输,之前用过socket.io-client,现在知道vue-socket.io是基于socket.io-client的一层封装,将socket挂于全局从而更方便的书写。 于是把代码拉取下来运行...
注意仅支持socket.io v1.3.0或更高版本。 该项目仅由翻译socket.io。 有关更多API,请参见安装作曲家需要workerman / phpsocket.io例子简单聊天start.php use Workerman \ Worker ;use PHPSocketIO \ SocketIO ;...
FlashSocket.IO, 帮助 Flash,Flex和ActionScript客户端连接到 socket.io 服务器的库 FlashSocket.IO支持Flex应用程序和 socket.io 服务器之间通信的Flash 库。真正的web socket通信由我的gimite/web-socket-js项目...
socket.io-arduino-client, Arduino以太网屏蔽的socket.io 客户端 客户端,Arduino客户端,用于连接和消息传递服务器基于 rohling web socket客户端的Kevin arduino,修改为使用 socket.io 服务器。 这里外,字符串...
用C#编写的socket.io客户端 用于socket.io的高性能C#客户端。 通过和可选配置实现灵活性。 建立在.NET Standard 2.1之上。 安装 PM> Install-Package Socket.Io.Client.Core 特征 完全异步且无阻塞的灵活API 发出...
安装npm install socket.io-auth用法只需将 socket.io 服务器和auth函数传递给socket.io-auth并在回调中添加其他事件: var io = require ( 'socket.io' ) ( 4000 )// setup and authentication methodauth = ...