[Users] Resource temporarily unavailable になった時

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


瀧です。


> 2014/11/29 22:48、master @ zio-matrix.net のメール:
> リソースじゃぶじゃぶなら、キャッピングなし で良いんですかね。
> サービスがリソース使い切れるほどチューニング出来てない のが制限かなと。
> global の swap を食われたのが原因な気がしてきました。
> SSD なので、物理メモリより swap が小さいので。


ここが誤解しやすいのですが、ここでいうswapというのは、
ディスクとして追加するswapではなくて、

swap=VirtualMemory=実質的なメモリ空間

の事なのですよ。

なので、

swap: 確保されたストレージ
ではなく、
swap: 確保されたストレージ+物理メモリ

になるのです。
たとえば、こんな感じです。

% swap -sh
total: 63G allocated + 2.0G reserved = 65G used, 250G available

vmstatで出てくるswapはこっちのほうですね。



確保されたストレージの方はこちら。
% swap -lh
swapfile             dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 287,2        8K     128G     128G


※s10は-hがなかったかもしれませんが。



で、zone.max-swapの方は、swap=VirtualMemory=実質的なメモリ空間 の方なので、
実際に制限するメモリの事なのですよ。





> On 2014/11/29 22:37, 瀧 康史 wrote:
>> 瀧です。
>> 
>> そっちはダメですね。
>> 
>> 
>> 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 メーリングリストの案内