系统中子进程继承父进程的系统限制。只有以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
转载于:https://blog.51cto.com/quietnight/2294362