linux下limit知识

linux下limit知识

一般新机器,在非root用户下部署java项目之前,一定需要新调整下机器的参数,这里与我们的java进程息息相关的就是 /etc/ecurity/limits 这里的配置。

/etc/ecurity/limits 限制住了系统用户下所有的文件句柄数,线程数,cpu时间片等等。我们这里只需要关注文件句柄数和线程数

  • 句柄数限制着我们的socket连接、文件IO等等。
  • 线程数则会限制我们java的新启动线程和请求,每个请求就是一个线程。

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) 256507
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
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) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

上面的 open files (-n) 65536max user processes (-u) 4096 是我们重点关注的。它限制了文件最大句柄数和线程数。

修改limit配置(针对centos6及其以上系统)

编辑 /etc/security/limits.conf, 修改如下配置:

#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits


#        - nofile - max number of open file descriptors
#        - nproc - max number of processes

*  soft  nofile 65536
*  hard  nofile 65536
*  soft  nproc 65536
*  hard  nproc 65536

注意:还需要修改一个地方,否则我们进程的最大限制会被重置掉,笔者之前在这个地方踩了不少坑。需要编辑 /etc/security/limits.d/下的文件。

*          soft    nproc     4096
root       soft    nproc     unlimited

这个 * 会有一个软线程的最大限制为 4096,会覆盖 /etc/security/limits.conf 里的配置。一般程序启动的线程都是属于 soft nproc

修改了limit后系统是否需要重新启动?

网上的说法是修改了 limit 后,重启linux系统才会奏效。事实上不是这样,修改了之后,新启动的进程会使用新的limit限制参数,而之前起的进程还是会使用老的配置,所以只需要重启进程即可。

查看系统线程使用的常用指令

# 查看linux下各个用户的线程使用情况
ps -eLo ruser|awk 'NR>1'|sort|uniq -c

# 查看当前进程的资源限制
cat /proc/{pid}/limit

# 查看进程的线程数
cat /proc/{pid}/status | grep Threads

# 查看进程的句柄数
cat /proc/{pid}/fd | wc -l

使用 /proc/pid/排查问题

可以评估一个应用的指标情况,可以看他的句柄数、线程数等等, 在 /proc/{pid}/fd/ 可以查看进程所有打开的文件,socket连接也是一个文件,当存在很多socket没有释放的话,说明open 文件没有关闭或者释放。

你可能感兴趣的:(linux下limit知识)