[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 メーリングリストの案内