[Users] Resource temporarily unavailable になった時

瀧 康史 taki @ justplayer.com
2014年 11月 29日 (土) 22:37:29 JST


瀧です。

そっちはダメですね。


add capped-memory
set physical=16G
end

とかですよね。


こっちはどうですか?

add rctl
set name=zone.max-swap
add value (priv=privileged,limit=17179869184,action=deny)
end

稼働中のZoneなら、僕が前に書いたブログをみて変えてみてください。
http://kohju.justplayer.com/Tips_Solaris_zones_apply.html





capped-memoryってのはrcapdが動いていて、この子がポーリングしながら、メモリの制限をしています。

たとえば、こんなです。
% rcapadm
                                      state: enabled
           memory cap enforcement threshold: 0%
                    process scan rate (sec): 15
                 reconfiguration rate (sec): 60
                          report rate (sec): 5
                    RSS sampling rate (sec): 5

で、ポーリング毎に、RSS(レジデントセットメモリ)をみて、
こえていたら、Swapに落としたりするわけです。

ポーリングである以上、そのポーリング間隔中にメモリを使われてしまったら制限がききませんし、
そもそもSwapに落とされるので、Global側のメモリも使われてしまいます。



Solaris含め、高度なUNIXは、VirtualMemory(=実質的なメモリ)であって、
物理メモリはその時にテーブルに載っているキャッシュみたいなものです。

rcapは実質的にはテーブルに載せるものの取捨選択の重み付けをする為のものであって、
実際にメモリの制限をするためにはswap側(=実質的なメモリ側)の方で制限をかけます。



・・・・

っていうか、実際問題、rcapって「よほどの事情」が無い限り「いらない」です。
なぜかというと、全Zoneの間で、1つでも臨界点に達し、rcapdが動き始めたら、
ページスキャナが動き始めて、ものすごくCPUパワーを使い始めます。
その結果、全体が遅くなるので、
「どうしてもこの子達だけはSwapアウトせずにオンメモリにいて欲しい」
という制御が目的じゃ無い限り、使い道が難しいんですよね。





> 2014/11/29 22:24、master @ zio-matrix.net のメール:
> 
> 瀧 さん
> 
> 
> 難波です。
> 
> 昔ながらのこれです。
> 
> <zone>
>  ・・・
>  <mcap physcap="17179869184"/>
>  ・・・
> </zone>
> 
> 
> On 2014/11/29 22:21, 瀧 康史 wrote:
>> 瀧です。
>> 
>> zonecfgってどうなってます?
>> 
>> memory capはどの方法でかけてるんでしょう?
>> 
>> 
>>> 2014/11/29 19:54、master @ zio-matrix.net のメール:
>>> 
>>> 難波です。
>>> 
>>> 
>>> 
>>> 先日 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 mailing list
>>> Users @ opensolaris.gr.jp
>>> https://mx.opensolaris.gr.jp/mailman/listinfo/users
>> 
> 
> 

-- 
◎1TB月額わずか980円のストレージサービス
 https://teracloud.jp/
◎かんたんに編集できるウェブサイト(ホームページ)WIKIPLUS
 http://www.wikiplus.jp/
◎Solarisベースのエンタープライズクラウドサービス
 http://www.justplayer.ne.jp/
-------------------
ジャストプレイヤー株式会社
代表取締役CEO兼CTO 瀧 康史
〒420-0039
静岡県静岡市葵区上石町2-4 河村上石町ビル 1F
TEL: 050-3801-5987  FAX: 050-5875-5011
〒140-0014 
東京都品川区大井1丁目6番3号 アゴラ大井町ビル3F MICAN内
mailto:taki @ justplayer.com http://www.justplayer.ne.jp/
ブログ: http://kohju.justplayer.com/
Twitter: http://twitter.com/kohju
http://www.facebook.com/taki.yasushi



Users メーリングリストの案内