Linux ulimit 性能调优
ulimit 用于shell启动进程所占用的资源,是 shell 内建命令。
功能说明:控制shell程序的资源。
补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。
语法格式:ulimit [-acdfHlmnpsStvw] [size]
参数:
-a 显示目前资源限制的数量
-c 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB。
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小> 指定可使用内存的上限,单位为KB。
-n <文件数目> 指定同一时间最多可开启的文件数。
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t 指定CPU使用时间的上限,单位为秒。
-u <程序数目> 用户最多可开启的程序数目。
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。
ulimit -a 来查看所有限制值,系统版本为 CentOS Linux release 7.5.1804 (Core)
# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15077 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65535 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 15077 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
应用实例:
Linux下写程序的时候,如果程序比较大,经常会遇到“段错误” (segmentation fault)
这样的问题主要就是由于Linux系统初始的堆栈大小(stack size)太小的缘故,一般为10240KB,即 10MB
一般把stack size设置成 20M,这样就没有段错误了!
1、临时修改栈大小
ulimit -s 20480
2、开机修改栈大小
如果要系统自动记住这个配置,就编辑 /etc/profile 或 /etc/rc.local文件,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit -s 20480”,保存重启系统就可以了
vim /etc/profile
添加一行后,重启系统
ulimit -s 20480
3、永久修改栈大小(重启系统后依然有效)
vim /etc/security/limits.conf
添加红色字体一行后,重启系统
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
# End of file
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
* soft stack 10240
修改最大进程数
Linux对于每个用户,系统限制其最大进程数,例如上面默认最大进程数为
max user processes (-u) 15077
为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数,
下面把某linux用户的最大进程数,临时设为30000个:
ulimit -u 30000
或永久设为 30000个:
vim /etc/security/limits.conf
添加两行后,重启系统
* soft noproc 30000
* hard noproc 30000
说明:
* 表示针对所有用户
root 表示管理员用户
noproc 是代表最大进程数
nofile 是代表最大文件打开数
修改最大连接数(最大文件打开数)
对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,
最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024
ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
其他建议设置成无限制(unlimited)的一些重要设置是:
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
CPU 时间:ulimit -t unlimited
虚拟内存:ulimit -v unlimited
core - 限制内核文件的大小
core文件,当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。
core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。
core文件是个二进制文件,需要用相应的工具(gdb等)来分析程序崩溃时的内存映像。
nofile - 打开文件的最大数目
对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用 ulimit –n,或者通过设置nofile 参数,为用户把文件描述符的数量设置得比默认值高一些
ulimit 修改为什么对 root 有效,对普通用户无效呢?
看一下/etc/security/limits.conf,你大概就会明白
vim /etc/security/limits.conf
#<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 # End of file root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 * soft stack 10240
其中, root 表示管理员,* 表示普通用户,都已经限制好了
linux 对用户有默认的ulimit限制,而这个文件可以配置用户的硬配置和软配置,硬配置是个上限,超出上限的修改就会出“不允许的操作”这样的错误。
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-07-28 13:02:03
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Linux ulimit 性能调优 (米扑博客)