天天看點

關于limits生效的四個案例

第一個問題

limits.conf的限制在/proc/pid/limits中未生效

# cat /proc/3606/limits
Limit                     Soft Limit           Hard Limit           Units
Max processes             31202                31202                processes
Max open files            1024                 4096                 files           

在Centos7 & ubuntu 系統中,使用Systemd替代了之前的SysV。/etc/security/limits.conf檔案的配置作用域縮小了。

/etc/security/limits.conf的配置,隻适用于通過PAM認證登入使用者的資源限制,它對systemd的service的資源限制不生效。是以登入使用者的限制,通過/etc/security/limits.conf與/etc/security/limits.d下的檔案設定即可。

對于systemd service的資源設定,則需修改全局配置,

全局配置檔案放在/etc/systemd/system.conf和/etc/systemd/user.conf,

同時也會加載兩個對應目錄中的所有.conf檔案/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf

system.conf是系統執行個體使用的,user.conf是使用者執行個體使用的。

vim /etc/systemd/system.conf
DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535           

修改并重新開機即可

# cat /proc/3613/limits
Limit                     Soft Limit           Hard Limit           Units
Max processes             65535                65535                processes
Max open files            100000               100000               files           

第二個問題

在服務裡面設定LimitNOFILE=infinity為什麼不是無窮大?

在服務裡面設定LimitNOFILE=infinity 後,通過檢視pid的limit發現openfile是65536 ,而不是無窮大

檢視服務配置

[root@iZwz98aynkjcxvtra0f375Z ~]# cat /etc/systemd/system/multi-user.target.wants/docker.service |grep -vi "^#"|grep -vi "^$"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd://
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target           

檢視配置效果

# cat /proc/11019/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             31202                31202                processes
Max open files            65536                65536                files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       31202                31202                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us           

這個是systemd的bug,低于240的版本需要手動設定才可以生效

LimitNOFILE=102400

https://github.com/systemd/systemd/issues/6559

第三個問題

為什麼openfile不能設定為unlimited

[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n
65535
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n unlimited
-bash: ulimit: open files: cannot modify limit: Operation not permitted           

原因是 centos7裡 openfile不能大于nr_open

[root@iZwz98aynkjcxvtra0f375Z ~]# cat /proc/sys/fs/nr_open
1048576
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n 1048577
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n 1048576
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n
1048576           

關于file-max nr_open file_nr的解釋 可參考

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

第四個問題

使用supervisor管理程序(測試環境ubuntu 1604)啟動程序後,maxfile是1024

需要修改配置檔案

#cat  /etc/supervisor/supervisord.conf
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

下面這兩行
minfds=655350                  ; min. avail startup file descriptors; default 1024
minprocs=65535                 ; min. avail process descriptors;default 200

# cat /proc/2423/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            655350               655350               files          ------------修改成功
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       61946                61946                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us    
           

外部文檔

https://www.cnblogs.com/zengkefu/p/5635153.html https://blog.csdn.net/google0802/article/details/52304776 http://blog.cloud.360.cn/post/tuning-your-system-for-high-concurrency.html https://blog.csdn.net/qq_38165374/article/details/104881340