zoukankan      html  css  js  c++  java
  • 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多报错退出了。

    博主:测试生财

    座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。

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

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

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

  • 相关阅读:
    2.2 图像分类-线性分类
    2.1 图像分类-K最近邻算法
    2 图像分类-数据驱动方法
    Week6
    R-CNN 原理详解
    1.2 课程介绍-课程后勤
    012_04Thread+Handler实例应用之号码归属地查询
    010_04用户登录(用户名,密码交给服务器并验证)
    010_03HTML源码查看器
    010_02带缓存的图片查看器
  • 原文地址:https://www.cnblogs.com/qa-freeroad/p/14166301.html
Copyright © 2011-2022 走看看