使用prlimit命令不重启进程修改其limits等运行参数

2022-09-28 13:33:24 浏览数 (1)

假设有个场景,数据库或者其它中间件的运行时文件句柄等参数设置过低,导致服务不可用或者间歇性不可用。

但是重启服务的代价可能很大,那么我们也可以不重启进程,做到修改某个进程的 limits范围。

这里可以使用 prlimit 命令来实现。

代码语言:javascript复制
这里我以MySQL服务为例

  $ ps auxf | grep -v grep | grep mysqld 
  mysql      1204  1.3  3.4 7311604 1134388 ?     Sl   Aug31  68:40 ./bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --user=mysql --log-error-verbosity=3




  $ cat /proc/1204/limits | grep file   # 看到文件句柄限制为10240了
  Max file size             unlimited            unlimited            bytes     
  Max core file size        0                    unlimited            bytes     
  Max open files            10240                10240                files     
  Max file locks            unlimited            unlimited            locks     

  # 用prlimit 搞一下
  $ prlimit --nofile=65535:65535 --pid 1204

  $ cat /proc/1204/limits | grep file        # 再次查看,可以看到已经变成 65535了 
  Max file size             unlimited            unlimited            bytes     
  Max core file size        0                    unlimited            bytes     
  Max open files            65535                65535                files     
  Max file locks            unlimited            unlimited            locks     


prlimit 还支持其它的参数修改,具体如下
  $ prlimit --help                                              

  Usage:
  prlimit [options] [-p PID]
  prlimit [options] COMMAND

  General Options:
  -p, --pid <pid>        process id
  -o, --output <list>    define which output columns to use
    --noheadings       don't print headings
    --raw              use the raw output format
    --verbose          verbose output
  -h, --help             display this help and exit
  -V, --version          output version information and exit

  Resources Options:
  -c, --core             maximum size of core files created
  -d, --data             maximum size of a process's data segment
  -e, --nice             maximum nice priority allowed to raise
  -f, --fsize            maximum size of files written by the process
  -i, --sigpending       maximum number of pending signals
  -l, --memlock          maximum size a process may lock into memory
  -m, --rss              maximum resident set size
  -n, --nofile           maximum number of open files        # 最常用
  -q, --msgqueue         maximum bytes in POSIX message queues
  -r, --rtprio           maximum real-time scheduling priority
  -s, --stack            maximum stack size
  -t, --cpu              maximum amount of CPU time in seconds
  -u, --nproc            maximum number of user processes        # 常用
  -v, --as               size of virtual memory
  -x, --locks            maximum number of file locks
  -y, --rttime           CPU time in microseconds a process scheduled
              under real-time scheduling

  Available columns (for --output):
  DESCRIPTION  resource description
    RESOURCE  resource name
      SOFT  soft limit
      HARD  hard limit (ceiling)
    UNITS  units

  For more details see prlimit(1).

0 人点赞