systemd的文件描述符限制引发的问题

背景

最近在测试一个MQTT的server,使用MQTT的client去连接server的时候,发现每次到1020个连接数左右的时候MQTTserver就挂了,而且MQTTserver只打印了一个退出的日志,没有打印其他信息。

问题定位

1)最开始我以为是该MQTT服务的日志没有打印全,于是尝试开启debug模式。打开debug开关后,仍旧没有更多的日志打印出来。

2)我怀疑是系统的文件描述符的限制:ulimit -a 查看打开的文件描述符的限制:远超过1000,看来也不是系统的文件描述符的限制问题。

3)由于该MQTT服务是systemd管理的,我尝试手动运行该MQTTserver,然后重新使用客户端连接,发现MQTTServer连接超过1000后也没有挂掉,于是我怀疑是systemd对进程有相关限制。

经过网上搜索,发现了一些蛛丝马迹,原来systemd管理的进程的日志并不会输出到该MQTTserver中,而是会刷新到另外的日志中,使用journalctl可以查看对应的日志。

输入:journalctl -u xxx.service --since today

看到了该MQTTserver打印的额外日志:

 

 

该服务由于打开文件描述符过多,而被systemd给kill了

输入:systemctl show xxx | grep -i limit

 

 

可以看到LimitNOFILELimitNPROC这两项配置太小,需要重新设置。

 

 

 

修改systemd的管理文件,加上红框中的配置: 

LimitNOFILE=88888
LimitNPROC=88888

重新加载配置: systemctl daemon-reload ,然后再次查看限制

 

 

此时服务的文件描述符限制打开了,而且使用Mqttclient去连接该Mqttserver也不会到1000多报错退出了。

博主:测试生财(一个不为996而996的测开码农)

座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

微信公众号:测试生财(定期分享独家内容和资源)

 

posted @ 2020-12-21 08:43  公众号-测试生财  阅读(267)  评论(0编辑  收藏  举报