淄博企业高端网站建设,购物平台网站建设框架,网站开发的后端,做平面设计需要学什么软件错误提示#xff1a; -bash: fork: retry: Resource temporarily unavailable 错误分析#xff1a;之前已经出现过这种资源限制的报错提醒#xff0c;然后整个系统可用的连接数就已经用完了#xff0c;无法使用工具来获取系统信息#xff0c;所以将运行的任务脚本kill后开…错误提示 -bash: fork: retry: Resource temporarily unavailable 错误分析之前已经出现过这种资源限制的报错提醒然后整个系统可用的连接数就已经用完了无法使用工具来获取系统信息所以将运行的任务脚本kill后开多个窗口打开top监控资源但是当资源限制提示出现后发现cpu和内存还有很多空余所以猜想是linux资源限制问题。 因为是使用root用户跑的任务脚本每次跑到25000左右线程数50000左右就会出现资源限制所以修改ulimit将一些可能影响资源的限制放开设置为unlimited或者设置一个较高的上限。 修改/etc/security/limits.conf 配置文件修改软限制和硬限制 [root130-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修改进程数量限制 [root130-171 limits.d]# cat 20-nproc.conf
# Default limit for number of users 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资源限制。 [root130-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系统中用户sliceUser 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 set-property user-0.slice TaskMax80000来设置limit限制的task数 然后查看slice状态。发现已经修改完成。 最后再运行任务程序发现资源限制问题没有再出现。 也可以在/etc/systemd/system.control/user-0.slice.d/50-TasksMax.conf配置文件里面来配置tasksmax参数 [root130-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]TasksMax200000