linux资源限制

资源限制修改参考

cat /etc/security/limits.conf

*               soft    core           unlimited   # 核心转储是程序崩溃时记录内存状态的文件。设置为 unlimited 意味着核心转储文件大小不受限制。
*               hard    core           unlimited   
*               soft    nofile         65535      # nofile 限制的是用户或进程能够同时打开的最大文件数(文件描述符)。如果进程尝试打开超过这个数量的文件,将会失败。软限制可以用户自己调整,但不能超过硬限制。
*               hard    nofile         65535
*               soft    nproc          10240      # nproc 限制用户能够同时运行的进程数。超过这个限制后,用户将无法创建更多的进程。
*               hard    nproc          10240
*               hard    memlock        32000       # kB, memlock 限制的是用户可以锁定在物理内存中的内存量,以防止其被交换到磁盘。通常用于需要高性能的程序。
*               soft    memlock        32000
*               hard    msgqueue       8192000     #bytes, msgqueue 限制消息队列的最大容量,消息队列是进程间通信(IPC)的一种方式。这些限制控制单个用户能够使用的消息队列容量。
*               soft    msgqueue       8192000
# @用户组
#@student        hard    nofile          65535       #student组中的任何人最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告
#@student        soft    nofile          65000

#@student        hard    nproc           50          #student组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告
#@student        soft    nproc           30
# 单用户
#student        hard    nofile          65535       #student用户最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告
#student        soft    nofile          65000

在Ubuntu下 不能用* ,代表所有用户,只能写具体用户,centos可以用*

 硬限制与软限制区别

root@rt:~# ulimit -Hn
1048576

root@rt:~# ulimit -Sn
1024

这两个限制都代表什么,为什么不一样?

ulimit -Hnulimit -Sn 代表的是 Linux 系统中针对文件描述符(file descriptors)设置的不同限制:

  • ulimit -Hn:表示 硬限制(Hard Limit),它是系统允许设置的文件描述符数量的上限。普通用户不能超过这个上限,只有超级用户(如 root)可以提高硬限制。
  • ulimit -Sn:表示 软限制(Soft Limit),这是当前用户可以使用的最大文件描述符数量。普通用户可以在软限制的范围内调整文件描述符的数量,但不能超过硬限制。

为什么两个值不一样?

  1. 硬限制(Hard Limit)

    • ulimit -Hn 返回 1048576,表示硬限制设置为 1,048,576,也就是系统最大允许的文件描述符数量。这是该系统允许用户设置的文件描述符的最高上限。
    • 超级用户可以使用 ulimit -Hn 来修改这个值,但普通用户不能提高超过硬限制。硬限制的存在是为了防止用户错误或恶意使用太多系统资源。
  2. 软限制(Soft Limit)

    • ulimit -Sn 返回 1024,表示当前会话中文件描述符的软限制为 1024。软限制是用户在日常操作中实际可以打开的文件描述符数量上限。
    • 用户可以通过 ulimit -Sn 临时提高软限制,但不能超过硬限制。

为什么不一样?

  • 安全性与资源管理:系统管理员通常会设定较低的软限制(如 1024),以限制普通用户在常规操作中打开过多的文件描述符。这有助于避免资源耗尽的风险,比如同时打开太多文件、网络连接等。
  • 灵活性:硬限制较大(如 1048576)提供了灵活性,让管理员或特定用户在必要时能提高软限制,处理资源密集型的任务。但默认软限制较低,确保系统日常情况下不会因为过多的文件描述符而崩溃。

调整软限制和硬限制

  1. 调整软限制(不能超过硬限制):

    ulimit -Sn 4096
  2. 调整硬限制(需要管理员权限):

    ulimit -Hn 2097152

总结

  • 硬限制:是系统允许的最大文件描述符数上限,只有管理员可以提高。
  • 软限制:是用户当前能够使用的文件描述符上限,用户可以在不超过硬限制的情况下调整。
  • 两者不一样是为了提供灵活性,既能防止资源滥用,又能让特定任务在需要时突破日常的限制。

所以得出结论:如果nginx配置最大连接数设置为65535,那么必须设置软限制为65535,可理解为硬限制是管理员为普通用户设置的限制,而软限制是普通应用用户的资源限制。

实践操作

验证了软限制不能超过硬限制,这个只是临时性设置,重启失效。

root@rt:~# ulimit -Hn
1048576
root@rt:~# ulimit -Sn
1024
root@rt:~# ulimit -Sn 2000000
-bash: ulimit: open files: cannot modify limit: Invalid argument
root@rt:~# ulimit -Sn 1048577
-bash: ulimit: open files: cannot modify limit: Invalid argument
root@rt:~# ulimit -Sn 1048576
root@rt:~# ulimit -Sn
1048576

 ###################################################################################

实践

针对单用户设置资源限制

修改配置

*               soft    nofile         65535
*               hard    nofile         65535
prometheus        hard    nofile          8192
prometheus        soft    nofile          8192

注释: 修改/etc/security/limits.conf配置文件不需要重启系统, 只需要重新登录用户;如果是应用程序,则需要重启。

    如果系统限制之前是4096,修改了系统限制后,还需要重启应用,重新加载系统的资源限制。

启动

[prometheus@kafka-1 node_export]$ whoami
prometheus
[prometheus@kafka-1 node_export]$ ll
total 20052
drwxr-xr-x 3 prometheus prometheus       91 Sep 10 14:29 1.6.1
-rw-r--r-- 1 prometheus prometheus    11357 Jul 14 19:57 LICENSE
-rwxr-xr-x 1 prometheus prometheus 20500541 Jul 14 19:54 node_exporter
-rw-r--r-- 1 prometheus prometheus     5875 Oct 11 10:35 nohup.out
-rw-r--r-- 1 prometheus prometheus      463 Jul 14 19:57 NOTICE
-rwxr-xr-x 1 prometheus prometheus       98 Oct  9 09:19 start.sh

验证

因为是prometheus用户启动的node_port程序,所以此程序资源限制受限于启动用户。

针对应用设置资源限制

修改配置

After=network-online.target

[Service]
Type=simple
Restart=on-failure
ExecStart=/opt/prometheus/prometheus-2.45.6/prometheus \
  --config.file=/opt/prometheus/prometheus-2.45.6/prometheus.yml \
  --storage.tsdb.path=/opt/prometheus/prometheus-2.45.6/data \
  --storage.tsdb.retention.time=15d \
  --web.enable-lifecycle
LimitNOFILE=10240

[Install]
WantedBy=multi-user.target

验证

 

posted @ 2021-12-20 00:00  不会跳舞的胖子  阅读(105)  评论(0编辑  收藏  举报