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有效。
?参数表示设置软限制;参数表示设置硬限制;当都不指定时,表示设置软限制和硬限制均为指定值。SH
-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
2、对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,需要设置每个进程可打开的文件数,缺省值是 1024。
3、CPU 时间
?
永久修改ulimit值? ------/etc/security/limits.conf
limits.conf-pam_limits模块的配置文件
<domain> <type> <item> <value>
-
domain
?是指生效实体
- 用户名
- 也可以通过
@group
指定用户组
- 使用
*
表示默认值
-
type
指限制类型
-
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