如何知道当前的进程数以及哪些进程分叉大多数进程?

时间:2018-06-08 03:46:25

标签: linux shell process

fork: retry: Resource temporarily unavailable

我正在调查哪个进程导致了这个问题,并想知道这个机制是如何工作的。

#!/bin/bash
#test.sh
for i in `seq 1 13000`; do
        echo $i
        sleep 60&
done

运行此脚本(./ test.sh)后,消息显示在下面。

...
12265
12266
12267
12268
./test.sh: fork: retry: Resource temporarily unavailable
./test.sh: fork: retry: Resource temporarily unavailable
./test.sh: fork: retry: Resource temporarily unavailable
./test.sh: fork: retry: Resource temporarily unavailable
./test.sh: fork: Resource temporarily unavailable

ps -elf |wc约为133xx行。 ulimit -u是1030977.

由于流程计数达到1030977,fork: retry: Resource temporarily unavailable会显示吗?如果为true,我如何知道当前计数以及如何知道哪个进程分叉大多数进程?

1 个答案:

答案 0 :(得分:2)

在/etc/security/limits.conf中为用户或所有用户增加“nproc”参数的值

示例:

@student        hard    nproc           2048

检查:可根据需要增加nproc值。 这里的模板是:

    <domain>        <type>  <item>  <value>
    "@student" -- Replace it with user for which limit has to be applied. For root user, username is "root"
    "hard" for enforcing hard limits
    "nproc" for max number of processes
    Last column is value.

要查找哪个进程正在分析大多数进程,请使用命令“pstree”。为了确定计数,请使用以下方法。

$ps | gawk '{count[$NF]++}END{for(j in count) print ""count[j]":",j}'|sort -rn|head -n 5

示例:

#ps | gawk '{count[$NF]++}END{for(j in count) print ""count[j]":",j}'|sort -rn|head -n 5
3: bash
1: sudo
1: sort
1: ps
1: CMD