1、总结系统限制有:
/proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值
/proc/sys/kernel/thread-max
max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程
/proc/sys/vm/max_map_count 硬件内存大小
2、Java虚拟机本身限制:
-Xms #intial java heap size
-Xmx #maximum java heap size
-Xss #the stack size for each thread
3、查询当前某程序的线程或进程数
pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l
或
pstree -p 3660 | wc -l
4、查询当前整个系统已用的线程或进程数
pstree -p | wc -l
5、其他
top -p {pid}
pstree -p {pid}
命令ulimit的格式:
ulimit [-acdfHlmnpsStuv] [limit]
在查看的命令后面加上限制值,就可以调整某一项限制,但只对当前登录shell有效。
参数S
表示设置软限制;参数H
表示设置硬限制;当都不指定时,表示设置软限制和硬限制均为指定值。
-S Set a soft limit for the given resource #设置给定资源的软限制 -H Set a hard limit for the given resource #设置给定资源的硬限制
-a All current limits are reported. #显示当前所有限制的内容 -c The maximum size of core files created. #-c <core文件上限> 设定core文件的最大值,单位为区块。 -d The maximum size of a process's data segment. #-d <数据节区大小> 程序数据节区的最大值,单位为KB。 -f The maximum size of files created by the shell(default option) #-f <文件大小> shell所能建立的最大文件,单位为区块。 -l The maximum size that can be locked into memory. #可以锁定的物理内存的最大值 -m The maximum resident set size. #可以使用的常驻内存的最大值,单位:kbytes -n The maximum number of open file descriptors. #每个进程可以同时打开的最大文件数 -p The pipe buffer size. #设置管道的最大值,单位为block,1block=512bytes -s The maximum stack size. #指定堆栈的最大值:单位:kbytes -t The maximum amount of cpu time in seconds. #指定每个进程所使用的秒数,单位:seconds -u The maximum number of processes available to a single user. #每个用户运行的最大进程并发数 -v The maximum amount of virtual memory available to the process. #当前shell可使用的最大虚拟内存
$ ulimit -a core file size (blocks, -c) 100 #文件的最大值为100 blocks data seg size (kbytes, -d) unlimited #进程的数据段可以任意大 unlimited不限制 scheduling priority (-e) 20 file size (blocks, -f) unlimited #文件可以任意大 pending signals (-i) 16382 #最多有16382个待处理的信号 max locked memory (kbytes, -l) 64 #一个任务锁住的物理内存的最大值为64kB max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值 open files (-n) 1024 #一个任务最多可以同时打开1024的文件 pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节 POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节 real-time priority (-r) 0 stack size (kbytes, -s) 8192 #进程的栈的最大值为8192字节 cpu time (seconds, -t) unlimited #进程使用的CPU时间 max user processes (-u) unlimited #当前用户同时打开的进程(包括线程)的最大个数 virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间 file locks (-x) unlimited #所能锁住的文件的最大个数没有限制
Example:
1、修改linux对于每个用户,系统限制其最大进程数 设置linux用户的最大进程数,如10000
ulimit -u 10000
2、对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,需要设置每个进程可打开的文件数,缺省值是 1024。
ulimit -n 65535
3、CPU 时间
ulimit -t unlimited
永久修改ulimit值 ------/etc/security/limits.conf
limits.conf-pam_limits模块的配置文件
<domain> <type> <item> <value>
domain
是指生效实体- 用户名
- 也可以通过
@group
指定用户组 - 使用
*
表示默认值
type
指限制类型soft
软限制hard
硬限制
item
限制资源core
同ulimit -c
data
同ulimit -d
fsize
同ulimit -f
memloc
同ulimit -l
nofile
同ulimit -n
stack
同ulimit -s
cpu
同ulimit -t
nproc
同ulimit -u
maxlogins
指定用户可以同时登陆的数量maxsyslogins
系统可以同时登陆的用户数priority
用户进程运行的优先级locks
用户可以锁定的文件最大值sigpengding
同ulimit -i
msgqueue
同ulimit -q