本文介绍: 因为是使用root用户跑的任务脚本,每次跑到25000左右,线程数50000左右就会出现资源限制,所以修改ulimit,将一些可能影响资源限制放开,设置为unlimited或者设置一个较高的上限。错误提示: –bash: fork: retry: Resource temporarily unavailable。最后运行任务程序发现资源限制问题没有再出现。修改完以后重启系统生效

错误提示: –bash: fork: retry: Resource temporarily unavailable

错误分析:之前已经出现过这种资源限制报错提醒,然后整个系统可用的连接数就已经用完了,无法使用工具获取系统信息,所以将运行任务脚本kill后开多个窗口打开top监控资源,但是当资源限制提示出现后发现cpu内存还有很多空余,所以猜想是linux资源限制问题

因为是使用root用户跑的任务脚本,每次跑到25000左右,线程数50000左右就会出现资源限制,所以修改ulimit,将一些可能影响资源的限制放开,设置为unlimited或者设置一个较高的上限。

修改/etc/security/limits.conf 配置文件,修改软限制和硬限制

[root@130-171 security]# vim limits.conf   
root soft nofile 655360
root hard nofile 655360
* hard nproc 655350
* soft nproc 655350

修改/etc/security/limits.d/20-nproc.conf,修改进程数量限制

[root@130-171 limits.d]# cat 20-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     unlimited
root       soft    nproc     unlimited
*          hard    nproc     unlimited
root       hard    nproc     unlimited

修改完以后重启系统生效

查看ulimit资源限制。

[root@130-171 log]# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 32133
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 655360
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) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

继续运行任务程序发现,资源限制仍然存在。

查看系统日志/var/log/message 过滤错误信息 fork,发现报错信息。发现是kernel内核cgroup机制限制了资源

在Linux系统中,用户slice(User Slice)是systemd服务管理器systemd)用于组织管理与用户相关的进程的一种机制。每个登录到系统的用户都会有一个对应的用户slice用于管理该用户的所有进程

用户slice名称通常是user-.slice,其中是用户的实际用户ID。例如,对于用户ID为1000的用户,其用户slice名称可能是user-1000.slice。

用户slice是systemd中的一个Cgroup控制组),Cgroups是一种用于管理进程组的机制。Cgroups可以用来限制进程的资源使用,例如CPU、内存进程数量(PIDs)。用户slice通过Cgroups为每个用户提供一个隔离环境,使得每个用户的进程可以独立运行,并且资源之间不会互相干扰。

当用户登录到系统时,systemd会为该用户创建一个对应的用户slice,并将用户的所有进程分配到该slice中。这样,每个用户的进程都会受到用户slice的资源限制。例如,每个用户的进程数量限制(PIDs限制)可以单独设置,这样即使某个用户的进程数量超出了限制,也不会影响其他用户的进程。

通过用户slice,系统管理员可以更好管理控制每个用户的进程,确保系统资源的合理分配和使用。同时,用户slice还可以每个用户提供一种隔离环境,防止不同用户之间的进程干扰和影响

使用systemctl status user-0.slice 命令查看root用户的slice限制,果然是slice限制了资源。

可以使用命令systemctl setproperty user-0.slice TaskMax=80000来设置limit限制的task

然后查看slice状态。发现已经修改完成。

最后运行任务程序,发现资源限制问题没有再出现。

可以在/etc/systemd/system.control/user-0.slice.d/50-TasksMax.conf配置文件里面来配置tasksmax参数

[root@130-171 user-0.slice.d]# vim 50-TasksMax.conf

# This is a drop-in unit file extension, created via "systemctl set-property"

# or an equivalent operation. Do not edit.

[Slice]

TasksMax=200000

原文地址:https://blog.csdn.net/qq_48391148/article/details/132099205

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_8958.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注