もしも、起動できるプロセスがめちゃ少ないLinuxがあったら

動かせるものが少ないと単純にどんな挙動になるのかな~と思って好奇心で実験してみることにしました。とは言うものの、実験としてはかなり大ざっぱだし、煮詰める部分はまだまだあるけど、とりあえずざっくりやってみたってもんです。

今日はもしもシリーズというその昔ドリフ大爆笑という番組があって、その中であったコントのシリーズです。

まずはプロセスの数を絞るのにゃ。
参考サイト
響雲   Linux スレッド数設定

今回はリブートしたらもとに戻るように “sysctl -n kernel.threads-max” この値だけを100くらいに設定しました。
軽く調べてみると、プロセスの数は起動直後は84くらい。
しばらくすると95くらいまで上がりました。

[root@32bittest]$ ps aux | wc
     94    1060    7363
[root@32bittest]$

最初はまずはシェルを起動してみます。連打、連打。

[root@32bittest]$ zsh
[root@32bittest]$ zsh
/etc/profile.d/colorls.sh:21: fork failed: リソースが一時的に利用できません
[root@32bittest]$ zsh
/etc/profile.d/colorls.sh:21: fork failed: リソースが一時的に利用できません
/etc/profile.d/vim.sh:3: fork failed: リソースが一時的に利用できません
compaudit:91: fork failed: リソースが一時的に利用できません
compinit:514: fork failed: リソースが一時的に利用できません
[root@32bittest]/home/takeken# zsh
zsh: fork failed: リソースが一時的に利用できません

こんな感じです。エラーが出ているはずなのにログには何も残らない。

次はApacheをリロードしてみる。

[root@32bittest]$ service httpd restart
/etc/rc.d/init.d/functions: fork: retry: Resource temporarily unavailable
/etc/rc.d/init.d/functions: fork: retry: Resource temporarily unavailable
/etc/rc.d/init.d/functions: fork: retry: Resource temporarily unavailable
/etc/rc.d/init.d/functions: fork: retry: Resource temporarily unavailable
/etc/rc.d/init.d/functions: fork: Resource temporarily unavailable
httpd を停止中: /etc/rc.d/init.d/functions: fork: retry: リソースが一時的に利用できません
/etc/rc.d/init.d/functions: fork: retry: リソースが一時的に利用できません
/etc/rc.d/init.d/functions: fork: retry: リソースが一時的に利用できません
/etc/rc.d/init.d/functions: fork: retry: リソースが一時的に利用できません
/etc/rc.d/init.d/functions: fork: リソースが一時的に利用できません
                                                           [  OK  ]
httpd を起動中: httpd: apr_sockaddr_info_get() failed for 32bittest
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]

上のログでは最終的にリロードできているけど、最初はまったく動かずでした。
Apacheのmpmをちょこっといじってようやくこんな感じに。ちなみにブラウザ上で確認してみたら、Apacheの仕組みの説明になってしまうので省きますが、プロセスが既にある分はちゃんと動いてくれます。
下のように当然だけど新しく作り出すことは出来ない。

[Tue Jul 08 13:07:45 2014] [error] (11)Resource temporarily unavailable: fork: Unable to fork new process
[Tue Jul 08 13:07:58 2014] [error] (11)Resource temporarily unavailable: fork: Unable to fork new process
[Tue Jul 08 13:08:08 2014] [error] (11)Resource temporarily unavailable: fork: Unable to fork new process
[Tue Jul 08 13:08:19 2014] [error] (11)Resource temporarily unavailable: fork: Unable to fork new process
[Tue Jul 08 13:08:29 2014] [error] (11)Resource temporarily unavailable: fork: Unable to fork new process

新しいものが出来ない場合は上のようなログになりました。

こんなことも起きます。

[root@32bittest]$ a
zsh: fork failed: リソースが一時的に利用できません
[root@32bittest]$
[root@32bittest]$ exit
[root@32bittest]$
[root@32bittest]$ a
zsh: command not found: a
[root@32bittest]$

これだけ見ても意味が分からんかもですが、これはシェルを1個閉じて、aというのが実行できたログです。
文章で表すのは難しいから載せないですけど、シェルを閉じるのではなくて、Apacheのセッションが切れるのを待ってからコマンドを実行してみるという事でも実行はできました。

出来ること、出来なくなったことを把握するのはちょっと難しそうですなぁ。
それが分かっただけでも収穫かしら。

眠いし・・今日はまあいいかぁ。

だめだこりゃ~。

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です