前提・実現したいこと
現在以下のエラーの通りLinuxコマンドが実行できない状態です。
おそらくスレッド数が多すぎるため発生しているエラーと思いますが、どのようにすれば解決できるでしょうか。
- スレッド数が10,000を超えたあたりから
Resource temporarily unavailable
が発生します。 - スレッド数を10,000を超えないようにすると
Resource temporarily unavailable
は発生しません。 - 以上2点からアプリケーションでは無く、Linux側の問題かと考えています。
- スレッドを多く建てる必要があるアプリケーションの為、スレッド数を抑えて解決という事はできません。
発生している問題・エラーメッセージ
- touch に限らず他のコマンドcatやvimコマンドも失敗します。
- 恐らく全てのコマンドが実行できないです。
- エラー発生前から実行中のプロセスは終了する事なく、問題なく実行され続けます。(htop等)
bash
1# touch hoge 2-bash: fork: retry: Resource temporarily unavailable 3-bash: fork: retry: Resource temporarily unavailable 4-bash: fork: retry: Resource temporarily unavailable 5-bash: fork: retry: Resource temporarily unavailable 6-bash: fork: Resource temporarily unavailable
cdは成功しますがエラーが出る事があります。(絶対出るわけではない)
root@~# cd /etc -bash: wait_for: No record of process 21875 root@/etc#
試したこと
- 最大スレッド数等を増やす
→解決しなかった
参考 https://blogs.itmedia.co.jp/komata/2012/05/linux-3132.html
sysctl -w kernel.threads-max=600000 sysctl -w kernel.pid_max=600000 sysctl -w vm.max_map_count=600000
- 最大PID数を増やす
→解決しなかった
$ vim /sys/fs/cgroup/pids/user.slice/user-0.slice/pids.max 999999 $ reboot
再現方法
-
- プログラムを書く
Source.c
1#include <stdio.h> 2#include <pthread.h> 3#include <unistd.h> 4void *thread () 5{ 6 sleep(9999); 7} 8 9int main() 10{ 11 int err = 0, count = 0; 12 pthread_t tid; 13 14 while (err == 0) 15 { 16 err = pthread_create (&tid, NULL, thread, NULL); 17 count++; 18 } 19 printf("max thread: %d\n", count); 20 getchar(); 21}
-
- コンパイルする
gcc source.c -pthread
-
- 実行する
$ ./a.out max thread: 10800 $ touch a -bash: fork: retry: Resource temporarily unavailable
補足情報(FW/ツールのバージョンなど)
- Ubuntu 18.04
- CPU 32 Core
- RAM 64GB
$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 257435 max locked memory (kbytes, -l) 16384 max memory size (kbytes, -m) unlimited open files (-n) 65536 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) 257435 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
$ uname -a Linux localhost 4.15.0-50-generic #54-Ubuntu SMP Mon May 6 18:46:08 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ cat /proc/sys/kernel/threads-max 514870
回答2件
あなたの回答
tips
プレビュー