一、单台服务器最高只能跑2W多一点
问题描述
一直使用benchmark测试单台EMQ都没有超过3W链接数

一个独立的外网IP只能提供最多6W的端口号,但每个TCP需要分配一个指定的端口号。所以理论上讲一台EMQ的服务器最多能跑6W链接数。
关于一直报”shutdown,eaddrnotavail”是因为测试的客户机端口号分配不足,并不是服务端无法分配端口号。

单台EMQ测试
1)、使用客户机数据5台
2)、最大链接数在76565
3)、异常情况是应用程序挂掉
erlang.log.4日志

===== ALIVE Sun Aug 26 14:56:54 CST 2018
[os_mon] cpu supervisor port (cpu_sup): Erlang has closed
[os_mon] memory supervisor port (memsup): Erlang has closed

查看端口号使用命令

#查看端口号使用命令

netstat -npta | grep <端口号> 

#查看端口号使用数量

netstat -npta |grep <端口号> | wc -l

  

Linux 系统参数优化

修改系统所有进程可打开的文件数量

sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152

vi /etc/sysctl.conf

fs.file-max = 2097152
fs.nr_open = 2097152

 

设置服务最大文件句柄数

vim /etc/systemd/system.conf

DefaultLimitNOFILE=1048576

持久化设置允许用户/进程打开文件句柄数:

ulimit -n 1048576  

> vim /etc/security/limits.conf

* soft nofile 1048576
* hard nofile 1048576

可用’*’号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;1048576则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。

TCP 协议栈网络参数

> vi /etc/sysctl.conf

### backlog - Socket 监听队列长度:
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.core.netdev_max_backlog=16384 ## 可用知名端口范围:
net.ipv4.ip_local_port_range='1000 65535' ## TCP Socket 读写 Buffer 设置:
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216 #sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
net.ipv4.tcp_rmem='1024 4096 16777216'
net.ipv4.tcp_wmem='1024 4096 16777216' ## TCP 连接追踪设置:
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 ## FIN-WAIT-2 Socket 超时设置:
net.ipv4.tcp_fin_timeout = 15
## TIME-WAIT Socket 最大数量、回收与重用设置:
net.ipv4.tcp_max_tw_buckets=1048576 # 注意: 不建议开启該设置,NAT模式下可能引起连接RST
# net.ipv4.tcp_tw_recycle = 1
# net.ipv4.tcp_tw_reuse = 1

 Erlang 虚拟机参数

> vim /usr/local/emqttd/etc/emq.conf
## Erlang Process Limit
node.process_limit = 2097152
## Sets the maximum number of simultaneously existing ports for this system
node.max_ports = 1048576 ## EMQ 最大允许连接数
## Size of acceptor pool
listener.tcp.external.acceptors = 64
## Maximum number of concurrent clients(以1G内存比5W进行配置)
listener.tcp.external.max_clients = 1000000

重启emq之后可以在Dashboard看到如下显示:

调整系统参数并且开始压测

cd emqtt_benchmark
sysctl -w net.ipv4.ip_local_port_range="500 65535"
echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 1000000
./emqtt_bench_sub -h 192.168.2.111 -c 32219 -i 1 -t bench /%i -q 2

  

EMQ 压测问题的更多相关文章

  1. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  2. Http压测工具wrk使用指南

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  3. 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率

    一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的 ...

  4. MySQL mysqlslap压测

    200 ? "200px" : this.width)!important;} --> 介绍 mysqlslap是mysql自带的一个性能压测工具:mysqlslap用于和其 ...

  5. 真刀真枪压测:基于TCPCopy的仿真压测方案

    郑昀 基于刘勤红和石雍志的实践报告 创建于2015/8/13 最后更新于2015/8/19 关键词:压测.TCPCopy.仿真测试.实时拷贝流量 本文档适用人员:技术人员 提纲: 为什么要做仿真测试 ...

  6. Netty NIO 框架性能压测-短链接-对比Tomcat

    压测方案 准备多个文件大小分别为 1k 10k 100k 300k 使用ab分别按 [50,2000](按50逐渐叠加)压测服务,每次请求10W次 硬件信息:CPU:Intel(R) Xeon(R) ...

  7. 图解jmeter压测http接口

    此次压力测试是以一个http json的后台接口为例. 1. 创建相应的部件 2. 设置相应的参数 线程组主要用于设置一共要测试的线程数量(上图1000),每秒起的线程数(上图10),几秒内启动完单循 ...

  8. Python Locust对指定网站“一键压测”

    [本文出自天外归云的博客园] 前篇 前篇:Python Locust性能测试框架实践 本篇 承上——归纳过程 在前篇的基础上,我们可以利用Locust性能测试框架编写python脚本对指定网站或者接口 ...

  9. JMeter压测Rest请求

    下载及安装 官网下载JMeter3.0: 找到bin目录下的jmeter.bat启动: 压测Rest请求 1.添加线程组 路径:右键“测试计划”->添加“Threads(Users)”-> ...

随机推荐

  1. 用Javascript轻松制作一套简单的抽奖系统

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> <html> <head ...

  2. 如何更新phpStorm SVN项目地址

    公司内网服务器换了IP地址,导致phpStorm 中的SVN更新不上去 如何在phpStorm中配置SVN这里就不赘述了,网上很多,自行百度 这里说一下如何更改phpStorm 中SVN地址 找到项目 ...

  3. Java常量定义需要注意事项及static作用(复习)

    在任何开发语言中,都需要定义常量.在Java开发语言平台中也不例外.不过在Java常量定义的时候,跟其他语言有所不同.其有自己的特色.在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮 ...

  4. 用C++/CLI搭建C++和C#之间的桥梁(三)—— 基本类型

    数值类型 对于基本的数值类型,在C++/CLI中是可以直接映射为托管类型的数值的,可以同时应用于托管类型和非托管类型,编译器会将其自动转换. 基本类型 System命名空间中对应的类 注释/用法 bo ...

  5. SQL Server性能调优:资源管理之内存管理篇(上)

    http://www.cnblogs.com/caspnet/archive/2011/02/21/1959539.html 对SQL Server来说,最重要的资源是内存.Disk和CPU,其中内存 ...

  6. linux命令显示文件内容行号|linux将内容以行号显示出来

            查看文件内容:cat /etc/shadow里面所有内容         cat命令是全部输出          cat /etc/shadow -n 输出内容及行号,空行业输出了   ...

  7. Vue.js插件开发

    Vue.js插件是为应用添加全局功能的一种强大而且简单的方式.插件的用途很广泛,从全局组件,到为应用添加一些额外的功能.如路由(Vue Router),存储在应用程序里的不可变数据(Vuex). 一般 ...

  8. 用百度SDK获取地理位置和天气信息

    以下实现通过百度SDK获取地理位置和天气信息,请參考title=android-locsdk/guide/v5-0">百度开发文档 1. 在相关下载最新的库文件.将so文件的压缩文件解 ...

  9. 斯坦福大学卷积神经网络教程UFLDL Tutorial - Convolutional Neural Network

    Convolutional Neural Network Overview A Convolutional Neural Network (CNN) is comprised of one or mo ...

  10. tyvj 2075 借教室 题解

    P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...