質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

Resource temporarily unavailableが発生し、コマンドが実行できない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 4
  • VIEW 1,124

daiki002

score 41

前提・実現したいこと

現在以下のエラーの通りLinuxコマンドが実行できない状態です。
おそらくスレッド数が多すぎるため発生しているエラーと思いますが、どのようにすれば解決できるでしょうか。

  • スレッド数が10,000を超えたあたりからResource temporarily unavailableが発生します。
  • スレッド数を10,000を超えないようにするとResource temporarily unavailableは発生しません。
  • 以上2点からアプリケーションでは無く、Linux側の問題かと考えています。
  • スレッドを多く建てる必要があるアプリケーションの為、スレッド数を抑えて解決という事はできません。

発生している問題・エラーメッセージ

  • touch に限らず他のコマンドcatやvimコマンドも失敗します。
  • 恐らく全てのコマンドが実行できないです。
  • エラー発生前から実行中のプロセスは終了する事なく、問題なく実行され続けます。(htop等)
# touch hoge
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable

cdは成功しますがエラーが出る事があります。(絶対出るわけではない)

root@~# cd /etc
-bash: wait_for: No record of process 21875

root@/etc#

試したこと

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 

再現方法

  • 1. プログラムを書く
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *thread ()
{
  sleep(9999);
}

int main()
{
  int err = 0, count = 0;
  pthread_t tid;

  while (err == 0)
  {
    err = pthread_create (&tid, NULL, thread, NULL);
    count++;
  }
  printf("max thread: %d\n", count);
  getchar();
}
  • 2. コンパイルする
gcc source.c -pthread
  • 3. 実行する
$ ./a.out
Maximum number of thread within a Process is : 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
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • Zuishin

    2020/02/11 15:45

    また英語が得意なら Stack Overflow で質問するのも手です。その場合は両者のガイドラインに従って適切に質問してください。

    キャンセル

  • Zuishin

    2020/02/11 15:47

    それと、私の貼ったリンク先には、どのリソースが不足しがちか書いてあります。それを参考に、具体的にどのリソースが枯渇したのかを調べ、質問に追記してください。

    キャンセル

  • aka-persona

    2020/02/13 11:10

    話の流れをぶった切りますが、ファイルディスクリプタは増やしましたか?

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る