zoukankan      html  css  js  c++  java
  • EasyCVR/EasyGBS程序运行为什么会出现too many open files?

    在现场 EasyCVR/EasyGBS 使用过程中,在接入大量设备后,程序运行会显示 too many open files。于是我们在 shell 中运行 ulimit –n 10240,可以成功,但是以服务运行,仍然是 too many open files。因此对 Linux 的 ulimit 进行针对性研究,解决该问题。

    一、ulimit 命令

    ulimit 用于 shell 启动进程所占用的资源。

    查看系统限制数量 ulimit –n

    查看系统显示数量(更详细) ulimit –a

    设置系统显示数量 ulimit –n 1024 设置 open files 1024

    查看 2056 进程的限制 cat /proc/2056/limits

    查看某个进程打开的文件数 lsof -p 2056 | wc –l

    lsof -e /run/user/1000/gvfs -p 2056 | wc –l

    查看进程打开的文件信息

    lsof -c easydss

    lsof |wc -l

    cat /proc/15386/limits 1024-4096 go

    全局设置 ulimit 数据

    二、Soft Limit 和 Hard Limit 的区别

    ulimit –n 默认查看的是软限制

    ulimit –Hn 查看的是硬限制

    ulimit –Sn 查看的是软限制

    ulimit -n 的最大值是 $((2**20))

    也就是最大 1048576 多加个 1 都会报错

    nofile 的 hard 绝对不允许超过 1048576,soft 随意,大不了最大1048576

    三、服务和进程 ulimit 的区别

    默认的软限制为 1024,硬限制为 4096

    首先设置 ulimit –n 3000

    以进程运行程序 ./tsingsee, 最终查看进程占用的 ulimit

    进程为 5210

    cat /proc/5210/limits

    进程的最大连接数已经增加,为 3000

    修改以服务运行,查看对应的 ulimit,仍然未 1024 4096

    为什么以服务运行,ulimit 限制仍然为默认值?继续探索。

    运行 cat /proc/5673/status 查看进程的状态,发现父进程的 pid 为 1:

    查看对应的父进程为 systemd

    以进程运行,pid为6943,查看对应的 6943 的父进程为 4286,查看 4286 的进程

    结论:

    服务的 ulimit 限制和进程的 ulimit 限制不是同一个地方设置的。

    ulimit –n 1000 是临时设置 shell 的大小,网上的设置 /etc/security/limits.conf 中的 ulimit 大小,也是不会设置到服务程序中。

    四、如何设置服务的 ulimit

    CentOS 的服务是 systemd 程序启动的,其他操作系统是以另外的程序启动的。针对 CentOS 的配置如下:

    有的操作系统是以 SysVinit 的方式启动服务的,对应的 ulimit 设置不同,需要针对性的探索。

    以内核作为示范。首先内核安装的服务名为 TsingseeMediaServer

    在 CentOS 为例,首先进入服务路径 /etc/system/system

    里面会有一个 TsingseeMediaServer.service

    vi TsingseeMediaServer.service

    在 Service 选项添加一个一行

    LimitNOFILE=5000

    查看原始进程对应的 ulimit 限制

    cat /proc/4043/limits

    目前是 4000 个 ulimit。运行以下命令,让 5000 生效

    systemctl daemon-reload

    重启 tsingsee 服务,查看对应的进程的 ulimit

    以上设置成功后,不会再出现 ulimit 的限制。

  • 相关阅读:
    Eclipse快捷键
    LeeCode
    Code Complete
    Git
    sql优化策略
    FSA/FSM/FST
    索引失效情况
    实现HttpHandlerFactory的方法
    Xpath语法格式整理
    Edojs应用
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/15634212.html
Copyright © 2011-2022 走看看