1. 程式人生 > >記錄linux下通過對limits的設置來優化系統性能

記錄linux下通過對limits的設置來優化系統性能

pgrep 目前 接下來 total 滿足 執行 獲取 linux下 第一個

系統中子進程繼承父進程的系統限制。只有以root用戶運行的進程能任意修改限制。其它進程不能增加硬限制值。這樣在一個session中登錄進程設置的硬限制值影響該session中的所有進程。

當要優化一個程序的限制值時,首先可以去查看這個程序的限制值是否滿足我們想要的條件,如你想看某個程序系統限制值,可以通過進程的pid來查看,命令如下

cat /proc/<pid>/limits 

當然,你首先需要找到程序的pid值,查看某個程序的pid值,你可以通過下面的命令獲取
pgrep -l 程序名 (如你想查找nginx的pid值,你可以執行pgrep -l nginx來查找)
如果你不確定你要找的pid是不是你想要的程序的pid,你可以通過如下方式查看

cd /proc/<pid>
ls -alh #目錄下的exe所映射的路徑就是指的程序路徑了

接下來就是對限制的一些修改方法了。
ulimit用命令對於直接去設置其它用戶沒有什麽作用,它只作用於本session的shell環境及本sessionshell環境中的進程,如果要去修改其它用戶的系統limits值可以修改/etc/security/limits.conf。
如:想修改所有用戶的能打開的最大進程數據及文件句柄數可以vi /etc/security/limits.conf,並添加如下內容
添加的如下如下

#<domain>        <type>  <item>  <value>
* soft nproc 100000
* hard nproc 100000
* soft nofile 100000 
* hard nofile 100000

#soft nproc: 可打開的文件句柄的最大數(軟限制)
#hard nproc: 可打開的文件句柄的最大數(硬限制)
#soft nofile:單個用戶可用的最大進程數量(軟限制)
#hard nofile:單個用戶可用的最大進程數量(硬限制)

#<domain> 可以是用戶名如www 也可以是組名如 @www
#<type> 有兩個值,一個是soft 表示軟限制 一個是hard 表示硬限制
#<item> 的值有 core ,data,fsize,memlock,nofile,rss,stack,cpu,nproc,as,maxlogins,maxsyslogins,priority,locks,sigpending,msgqueue,nice,rtprio;下面只作幾個介紹
#     core Core文件的最大值設置,單位是(KB)。Core文件是內存的映像,如當程序崩潰時,產生的內存信息文件。
#     data 程序的數據段最大值,就是當程序初始時,給程序的最大初始化內存空間,單位是(KB)。
#     fsize 設置用戶能操作的最大文件,單位是(KB)。
#     memlock 設置程序能鎖住內存的最大值,也就是程序的個人內存空間的最大值,單位是(KB)。
#     nofile 單個用戶可用的最大進程數量
#     nproc  可打開的文件句柄的最大數
#     cpu  設置程序最長占用cpu時間 單位是秒
#     maxlogins  同一時間用戶的最大登錄數
#     maxsyslogins 設置系統中用戶的最大登錄數據 
#當你修改/etc/security/limits.conf後。它只會影響新的session。及在新session中運行的程序。不會影響已經運行的程序。

當然我們也可以修改系統級的限制值。如下只記錄幾個對文件系統限制值的修改

/proc/sys/fs/file-max
決定了當前內核可以打開的最大的文件句柄數
file-max一般為內存大小(KB)的10%來計算
計算方式:

grep -r MemTotal /proc/meminfo | awk ‘{printf("%d",$2/10)}‘

327601
增加這個值的方式可以如下

echo 427601 > /proc/sys/fs/file-max

或者

echo "fs.file-max=427601" >> /etc/sysctl.conf
sysctl -p

/proc/sys/fs/file-nr (這個文件只做查看用)

1728 0 325288
三個值
第一個:目前分配的文件句柄
第二個:以分配但是是空閑的文件句柄
第三個:系統及的最大文件分配句柄數,也就是當前內核可以打開的最大的文件句柄數(它的值是與/proc/sys/fs/file-max中的值是匹配的,可以通過cat /proc/sys/fs/file-max查看)

/proc/sys/fs/nr_open
指明一個程序能分配的最大文件句柄數
修改這個值的方式可以如下

echo 427601 > /proc/sys/fs/nr_open

或者

echo "fs.fs.nr_open=427601" >> /etc/sysctl.conf
sysctl -p

記錄linux下通過對limits的設置來優化系統性能