如何在Linux上为用户找到ulimit

时间:2020-01-09 10:39:14  来源:igfitidea点击:

如何在Linux系统上为用户帐户或进程找到正确的ulimit值?
为了正确操作,我们必须确保在安装各种软件之后设置正确的ulimit值。

Linux系统提供了限制可以使用的资源数量的方法。
为每个Linux用户帐户设置的限制。
但是,系统限制也分别应用于为该用户运行的每个进程。
例如,如果某些阈值太低,则系统可能无法使用Nginx/Apache或PHP/Python应用程序为网页提供服务器。
使用NA命令查看或设置的系统资源限制。
让我们看看如何使用ulimit来提供对Shell和进程可用资源的控制。

如何在Linux上为用户找到ulimit

ulimit Linux命令设置或显示用户进程资源限制。
通常,限制是在/etc/security/limits.conf文件或systemd单位中定义的。

两种限制

所有Linux限制都分为软限制或硬限制:

  • "软限制"所有用户都可以更改软限制,最高可以设置为硬限制。将-S选项传递给ulimit。
  • 硬限制仅允许root用户更改资源硬限制。将-H选项传递给ulimit。

查看Linux用户帐户的ulimit

语法如下,以查看当前用户的所有软限制和硬限制:

ulimit -Sa ## Show soft limit ##
ulimit -Ha ## Show hard limit ##
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 126787
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 126787
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

列出用户名为tom的所有硬ulimit

您必须以root用户身份运行以下命令,或者至少可以通过sudo/su访问该帐户:

su - tom -c "ulimit -Ha"
su - tom --shell /bin/bash -c "ulimit -Ha"

## You can use the sudo command ##
sudo -u tom bash -c "ulimit -Ha"
sudo -u tom sh -c "ulimit -Ha"

查找名为jerry的用户的所有软件ulimit

再次,使用su命令或sudo命令以root身份运行它:

su - jerry -c "ulimit -Sa"
su - jerry --shell /bin/sh -c "ulimit -Sa"

## You can use the sudo command ##
sudo -u jerry bash -c "ulimit -Sa"
sudo -u jerry sh -c "ulimit -Sa"

相关技巧:如何在Linux或Unix下的sudo中运行多个命令

为进程用户查找ulimit -a

Linux进程不过是程序的运行实例。
例如,当您启动Firefox应用程序时,您创建了一个过程。
但是,某些进程在后台运行的时间更长。
通常,服务器进程在后台运行,并且您不能使用sudo命令或su命令来找到其限制。
在此示例中,nginx在Debian Linux上以www-data用户身份运行,但是出于安全原因,默认情况下阻止对www-data用户帐户的shell访问。
换句话说,以下su或sudo命令将失败100%:

$ su - www-data -c "ulimit -Sa"
This account is currently not available.

如何为进程找到ulimit

语法为:

cat /proc/PID/limits

首先找到nginx的PID(进程ID),然后运行ps命令和grep命令:

ps aux | grep nginx

输出示例:

root        8868  0.0  0.0 127044 24048 ?        Ss   May23   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   18074  0.0  0.0 127276 24716 ?        S    May23   0:09 nginx: worker process
www-data   18075  0.0  0.0 127276 22284 ?        S    May23   0:00 nginx: worker process

现在运行以下cat命令:

cat /proc/8868/limits

输出示例:

Limit                    Soft Limit          Hard Limit          Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             unlimited            unlimited            processes 
Max open files            1024                 1048576              files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       385944               385944               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us

大多数开发人员和系统管理员需要了解每个nginx进程的最大进程数和打开文件数。简而言之,我们使用ps aux |找到PID。 grep appname,然后查看/proc /目录中的PID限制文件。然后,您将确定要应用哪些值来调整性能。

了解ulimit标志

选项说明
-S使用软资源限制
-H使用硬资源限制
-a报告所有当前限制
-b套接字缓冲区大小
-c创建的核心文件的最大大小
-d进程数据段的最大大小
-e最大调度优先级(nice)
-fshell及其子级写入文件的最大大小
-i待处理信号的最大数量
-k为此进程分配的最大队列数
-l进程可能锁定到内存的最大大小
-m最大居民集大小
-n打开文件描述符的最大数量
-p管道缓冲区大小
-qPOSIX消息队列中的最大字节数
-r最大实时调度优先级
-s最大堆栈大小
-t以秒为单位的最大cpu时间
-u最大用户进程数
-v虚拟内存的大小
-x文件锁的最大数量
-P最大伪终端数
-T最大线程数