参考官方配置页面:http://emqtt.com/docs/v2/tune.html

Linux 操作系统参数
系统所有进程可打开的文件数量
官方配置:

sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
echo 2097152 > /proc/sys/fs/nr_open

服务器当前配置:

[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/file-max
798344
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/nr_open
1048576

  

修改服务器配置:

echo 1048576 > /proc/sys/fs/file-max
echo 1048576 > /proc/sys/fs/nr_open

  

[root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 1048576 > /proc/sys/fs/file-max
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/file-max
1048576
[root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 1048576 > /proc/sys/fs/nr_open
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/nr_open
1048576

  

系统允许当前进程打开的文件数量:

官方配置:

ulimit -n 1048576

  

本地服务器配置:

[root@iZuf6ixy03u72vzno4jsiuZ ~]# 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) 31402
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 278528
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimied

修改配置文件:

ulimit -n  524288

  

修改后配置:

[root@iZuf6ixy03u72vzno4jsiuZ ~]# ulimit -n  524288
[root@iZuf6ixy03u72vzno4jsiuZ ~]# 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) 31402
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 524288
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

 

/etc/sysctl.conf

持久化 ‘fs.file-max’ 设置到 /etc/sysctl.conf 文件:

  

官方配置:

fs.file-max = 1048576
#表示文件句柄的最大数量

修改配置:

vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.lo.arp_announce=2
# fs.file-max=65535
fs.file-max=524288

  

设置服务最大文件句柄数
/etc/systemd/system.conf 设置服务最大文件句柄数:
DefaultLimitNOFILE=1048576

持久化设置允许用户/进程打开文件句柄数
/etc/security/limits.conf 持久化设置允许用户/进程打开文件句柄数:
limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。

官方配置:

* soft nofile 1048576
* hard nofile 1048576

  

服务器配置:

# End of file
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* - nofile 278528

服务器修改后配置:

# End of file
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
* soft nofile 524288
* hard nofile 524288
* - nofile 278528

TCP 协议栈网络参数

并发连接 backlog 设置:

官方配置:

sysctl -w net.core.somaxconn=32768
#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
#对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字。
sysctl -w net.core.netdev_max_backlog=16384
#在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

服务端配置:

[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/somaxconn
128
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/netdev_max_backlog
1000

修改配置:

[root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 8192 >/proc/sys/net/core/somaxconn
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/somaxconn
8192
[root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
4096
[root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 4096 > /proc/sys/net/core/netdev_max_backlog
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/netdev_max_backlog
4096

  

可用知名端口范围:
官方配置:

sysctl -w net.ipv4.ip_local_port_range='1000 65535'

 

服务端配置

cat /proc/sys/net/ipv4/ip_local_port_range
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000

TCP Socket 读写 Buffer 设置:
官方配置:

sysctl -w net.core.rmem_default=262144
#表示接收套接字缓冲区大小的缺省值(以字节为单位)
sysctl -w net.core.wmem_default=262144
#表示发送套接字缓冲区大小的缺省值(以字节为单位)
sysctl -w net.core.rmem_max=16777216
#表示接收套接字缓冲区大小的最大值
sysctl -w net.core.wmem_max=16777216
#表示发送套接字缓冲区大小的最大值
sysctl -w net.core.optmem_max=16777216
#该文件表示每个套接字所允许的最大缓冲区的大小

服务端配置:

[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/rmem_default
124928
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/wmem_default
124928
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/rmem_max
124928
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/wmem_max
124928
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/optmem_max
20480

修改服务端配置:

echo 4194304 > /proc/sys/net/core/rmem_max
echo 4194304 > /proc/sys/net/core/wmem_max
echo 4194304 > /proc/sys/net/core/optmem_max
cat /proc/sys/net/ipv4/tcp_mem
#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'

内核分配给TCP连接的内存
第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预
第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式
第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory

sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'
#为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte
第一个数字表示,为TCP连接分配的最小内存
第二个数字表示,为TCP连接分配的缺省内存
第三个数字表示,为TCP连接分配的最大内存 [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_mem
753600 1004800 1507200
#无修改

  

TCP 连接追踪设置:

官方配置:

sysctl -w net.nf_conntrack_max=1000000
sysctl -w net.netfilter.nf_conntrack_max=1000000
#CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

服务端配置:

cat /proc/sys/net/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/nf_conntrack_max
65536
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
65536
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait
120

  

修改服务端配置:

echo 250000 > /proc/sys/net/nf_conntrack_max
echo 250000 > /proc/sys/net/netfilter/nf_conntrack_max

TIME-WAIT Socket 最大数量、回收与重用设置

官方配置:

net.ipv4.tcp_max_tw_buckets=1048576
#表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。

当前服务器配置:

cat /proc/sys/net/ipv4/tcp_max_tw_buckets
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
5000

修改服务器配置:

echo 262114 > /proc/sys/net/ipv4/tcp_max_tw_buckets

注意: 不建议开启該设置,NAT模式下可能引起连接RST

# net.ipv4.tcp_tw_recycle = 1
# net.ipv4.tcp_tw_reuse = 1

  

FIN-WAIT-2 Socket 超时设置:

net.ipv4.tcp_fin_timeout = 15
cat /proc/sys/net/ipv4/tcp_fin_timeout

  

[root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
[root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
15

  

提高Linux应对短连接的负载能力
在存在大量短连接的情况下,Linux的TCP栈一般都会生成大量的 TIME_WAIT 状态的socket。你可以用下面的命令看到:
netstat -ant| grep -i time_wait
有时候,这个数目是惊人的:
netstat -ant|grep -i time_wait |wc -l
可能会超过三四万。这个时候,我们需要修改 linux kernel 的 tcp time wait的时间,缩短之,有个 sysctl 参数貌似可以使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒。

 

 

EMQ配置的更多相关文章

  1. EMQ配置“ClientId 认证”

    EMQ配置“ClientId 认证” 基于 MQTT 客户端 ID 认证 clientId配置文件地址 /etc/emqttd/plugins/emq_auth_clientid.conf 内容如下: ...

  2. EMQ配置通过nginx反向代理wss和ws

    参考:https://www.cnblogs.com/succour/p/6305574.html EMQ官方文档:https://docs.emqx.io/broker/v3/cn/ 一,系统环境及 ...

  3. MTQQ 物联网

    这个是学校的SRP项目.去年12月做了大概3周. 直接摘个人总结报告如下: 在本次“学生研究计划”项目,研究课题是“基于JAVA的智能家居公众号”.根据课题要求之一:以微信作为媒介,实现智能设备的远程 ...

  4. 物联网架构成长之路(5)-EMQ插件配置

    1. 前言 上一小结说了插件的创建,这一节主要怎么编写代码,以及具体流程之类的.2. 增加一句Hello World 修改 ./deps/emq_plugin_wunaozai/src/emq_plu ...

  5. Jetty Maven Plugin配置

    官方文档:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#maven-config-https 1 ...

  6. emqtt 试用(五)emq 的用户密码认证

    MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous),通过加载认证插件可开启 ...

  7. emqtt 试用(四)emq 的主题访问控制 acl.conf

    访问控制(ACL) EMQ 消息服务器通过 ACL(Access Control List) 实现 MQTT 客户端访问控制. ACL 访问控制规则定义: 允许(Allow)|拒绝(Deny) 谁(W ...

  8. 使用EMQ搭建MQTT服务器

    前言寒假的时候开始搭建mqtt服务器,一开始使用的是RabbitMQ,基于Erlang语言.但是RabbitMQ的本职工作是AMQP,MQTT只是他的一个插件功能,似乎有些大材小用,很多MQTT的功能 ...

  9. MQTT研究之EMQ:【EMQ之HTTP认证/访问控制】

    今天进行验证的逻辑是EMQ的http的Auth以及ACL的逻辑. 首先,参照HTTP插件认证配置的说明文档进行基本的配置, 我的配置内容如下: ##-------------------------- ...

随机推荐

  1. Switching regulator forms constant-current source

    Many applications require current sources rather than voltage sources. When you need a high-current ...

  2. 源码管理--llorch的Visual Studio基本教程(四)

    通用的演示样例说明: 本系列博客仅仅讨论工具的基础,不讨论不论什么语言. 甚至不讨论快捷键:-) 能够用鼠标就完毕本教程 IDE默认指代的是Visual Studio 2013 Community E ...

  3. Fiddler2 抓取手机APP数据包

    原文:http://blog.goyiyo.com/archives/2044 下载安装运行后,查出运行机器的IP,手机连接同一网域内的WIFI,手机WIFI连接设置里的高级里,代理设置填写上Fidd ...

  4. vi命令用法

    从shell中启动可视化编辑器vi filename指示shell启动vi编辑器,并将参数filename传给它.如果当前目前中存在该文件,则vi编辑器将它解释为要打开的文件:如果没有该文件,则vi编 ...

  5. Valgrind 内存泄漏工具

    Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...

  6. 美国保健品品牌介绍之Now Foods

    Now Foods是美国著名的美国保健品品牌,定位于大众品牌. 美国Now Foods公司位于美国伊利诺州,台湾中文名叫健而婷,成立于1968年,是美国保健品市场上名列三甲的国际知名的天然保健品牌,其 ...

  7. 7)Linux程序设计入门--网络编程

    )Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个 ...

  8. 对于Ian的访谈,不少关于GAN的内容

    文章链接如下: http://3g.163.com/dy/article/DD1GBSLF0511ABV6.html 里面提到胶囊网络,我找了这篇文章看了下: https://blog.csdn.ne ...

  9. C#常见算法题目

        //冒泡排序    public class bubblesorter    {        public void sort(int[] list)        {            ...

  10. 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)

    目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for w ...