zoukankan      html  css  js  c++  java
  • /etc/security/limits.conf 和/etc/systemd/system.conf 及/etc/systemd/user.conf的区别

    通常我们在设置某个进程可打开最大文件句柄数的时候都会去找/etc/security/limits.conf

    这个文件,在底部添加类似如下的设置

     *           soft   nofile       65535
     *           hard   nofile       65535
     *           soft   nproc        65535
     *           hard   nproc        65535

    但是有时候你会发现设置并没有生效,比如mysql服务,明明配置文件设置了max_connections=5000或者其他数值,但是

    进入mysql后,通过show variables like '%connections%';你会发现这里的最大可打开连接数还是受限

    root@server 11:54:  [(none)]> 
    root@server 11:54:  [(none)]> 
    root@server 11:54:  [(none)]> show variables like '%connections%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | max_connections        | 214 |
    | max_user_connections   | 0     |
    | mysqlx_max_connections | 100   |
    +------------------------+-------+
    3 rows in set (0.02 sec)
    
    root@server 11:54:  [(none)]> exit
    Bye

    同时你通过cat /proc/mysql进程id/limits会发现这里的限制也依然是

    [root@local-huajing /root]# cat /proc/1823/limits 
    Limit                     Soft Limit           Hard Limit           Units     
    Max cpu time              unlimited            unlimited            seconds   
    Max file size             unlimited            unlimited            bytes     
    Max data size             unlimited            unlimited            bytes     
    Max stack size            8388608              unlimited            bytes     
    Max core file size        0                    unlimited            bytes     
    Max resident set          unlimited            unlimited            bytes     
    Max processes             65535                65535                processes 
    Max open files            1024                4096                 files     
    Max locked memory         65536                65536                bytes     
    Max address space         unlimited            unlimited            bytes     
    Max file locks            unlimited            unlimited            locks     
    Max pending signals       15505                15505                signals   
    Max msgqueue size         819200               819200               bytes     
    Max nice priority         0                    0                    
    Max realtime priority     0                    0                    
    Max realtime timeout      unlimited            unlimited            us 

    你会发现mysql进程这里分别是1024和4096,也并未被/etc/security/limits.conf  的设置影响。

    仔细看/etc/security/limits.conf  文件顶部的说明,你会发现有了相关说明,

    [root@local-huajing /root]# cat /etc/security/limits.conf 
    # /etc/security/limits.conf
    #
    #This file sets the resource limits for the users logged in via PAM.
    #It does not affect resource limits of the system services.
    #
    #Also note that configuration files in /etc/security/limits.d directory,
    #which are read in alphabetical order, override the settings in this
    #file in case the domain is the same or more specific.
    #That means for example that setting a limit for wildcard domain here
    #can be overriden with a wildcard setting in a config file in the
    #subdirectory, but a user specific setting here can be overriden only
    #with a user specific setting in the subdirectory.
    #
    #Each line describes a limit for a user in the form:
    #
    #<domain>        <type>  <item>  <value>

    可以发现第二行红字说明,此设置对system services不生效,只对通过PAM登录的用户生效,也就是说我们使用systemd管理的

    服务进程是不受这里影响的,那么受什么影响呢,就是/etc/systemd/system.conf 及/etc/systemd/user.conf文件,有什么区别呢

    取决你systemd服务本身运行在什么状态,是系统实例还是用户实例,通常情况下是运行在系统实例。如图:就代表运行以系统实例状态

    在运行,那么怎么以用户实例运行呢,需要把--system 换成--user即可。不过通常情况下都是系统实例状态。

    那么回到刚才那2个配置文件,以什么状态运行,你就去哪里修改配置文件内容即可,继续回到字上面的mysql的问题,我的mysqld服务就是用systemd管理的,并在运行为系统实例

    那么我就需要修改etc/systemd/system.conf 里面的最大可打开文件句柄数即可。如下图:

    取消前面的注释,并设置为65535,并重启服务。

    重启服务之后,你再去看mysql进程的可打开最大文件,你会发现均变为了65535,同时登录mysql查看max_connection由原来的214也变为5000了。

    当然网上也有直接在mysqld的service文件里在service段直接添加LimitNOFILE=65535配置解决,原理都是一样的。二者皆可。

    PS:如果你的mysql进程是通过普通的命令行启动的,而不是systemctl,那么是可以读取/etc/security/limits.conf里面的配置的。

    可随意转载,欢迎署名!
  • 相关阅读:
    15. 驱动通用编译脚本
    13. linux 中断式驱动编程
    vlc源码分析(二) 播放流程
    vlc源码分析(一) vlc-android native调试配置
    RTSP会话流程——理论结合例子,非常具有参考意义
    RTSP协议学习笔记——详细总纲,入门圣典
    VLC源码分析总结 ——入门纲领
    如何阅读X264代码
    源码分析系列(五)x264_ratecontrol_dataflow
    源码分析系列(四)x264_nal_dataflow
  • 原文地址:https://www.cnblogs.com/netsa/p/15385635.html
Copyright © 2011-2022 走看看