[Users] Resource temporarily unavailable になった時
master @ zio-matrix.net
master @ zio-matrix.net
2014年 11月 29日 (土) 19:54:52 JST
難波です。
先日 zone 上の Apache 2.4 MPM_worker の cgid に負荷をかけたところ、
global まで波及して?? 大変なことになりました。
OS : Solaris11.1/SPARC
CGI: 計測用の簡単なもの @ Apache 2.4 MPM_worker cgid
MEM: 16GB を割り当て(zone.cfg でキャップ)
(11)Resource temporarily unavailable: apr_thread_create: unable to
create worker thread
となったので、刺さった か スローダウン だろうな。 という事で
ベンチマークを中断しました。
その後、global およびその他の zone で Resource temporarily unavailable
が出るようになって、新規の fork() がほぼ失敗するようになりました。
ほぼ失敗 というのは稀に一部のコマンドは成功する状態です。
# fork しなくていいプロセス類は応答を返してくれました
調べようとしてもコマンドの応答が Resource temporarily unavailable に
なって出力を得られない 最悪刺さってプロンプトが戻ってこない 自体に
なっていました。
Resource temporarily unavailable なのでメモリが枯渇した という方向でも
調査しましたが、50% の空きがありました。
Resource temporarily unavailable でも時々 top が成功するので
その出力から見ています。
ベンチマークした CGI が無負荷でプロセスが残っていたので、kill
しましたが、改善されず、reboot や shutdown も Resource temporarily
unavailable で受け取らないので -> stop /SYS で止めました。
# (調べている間に)30分以上待っても解消されませんでした。
kenel-zone にすれば回避できるかな? という感じですが、zone のベンチ
マーク等で似たような経験がある方はいませんか?
これだと DoS られた挙句、global 巻き添え死 になってしまうので。
改修案としては
1. Solaris11.2 kernel-zone
2. zone のメモリキャップ(バグかもしれないので)外す
3. MPM_worker をやめる(prefork でも構わないので)
と言ったところでしょうか。
Xeon と比べてスレッドの多い SPARC T ですが、いろいろ上手く
使えていません。
たとえば、dnsperf で
$ /usr/local/nom/bin/dnsperf -c 256 -s SERVER \
-d /usr/local/nom/share/queryfile-example-current_10000
こんな事すると dnsperf のプロセスが刺さって、延々 LA 256+ という
とてつもない事態になります。(冷却テストにしかならない)
Users メーリングリストの案内