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

WindowsUpdateと言えば再起動、再起動といえばWindowsUpdateという命題が両方とも真になってしまいそうなくらい再起動しやがりますのお。

大量のRSSを読んでる時に再起動しますよ~と来るとちょっとやだね。

 

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

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

まずはプロセスの数を絞るのにゃ。

参考サイト
響雲   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のセッションが切れるのを待ってからコマンドを実行してみるという事でも実行はできました。

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

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

だめだこりゃ~。

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *