[Users] Resource temporarily unavailable になった時

master @ zio-matrix.net master @ zio-matrix.net
2014年 11月 29日 (土) 22:48:53 JST


瀧 さん



難波です。

> add capped-memory
> set physical=16G
> end
>
> とかですよね。

ですね、zonecfg 打つこと殆どないです。
xml 直書、zonecfg verify してます。


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


cpucap は上記のような事情?か何かで 富士通の公開資料で 11 から使うな
ってあって外したのですが、memcap は慣例で残してました。

Sol10 の頃だと 8-16GB でがっつり使われると足りなかったので、
使ってました。
rcapd が CPU 食ってるのも知ってます。


リソースじゃぶじゃぶなら、キャッピングなし で良いんですかね。

サービスがリソース使い切れるほどチューニング出来てない のが制限かなと。



global の swap を食われたのが原因な気がしてきました。

SSD なので、物理メモリより swap が小さいので。


capped-memory を廃止して


  <rctl name="zone.max-swap">
    <rctl-value priv="privileged" limit="XXXX" action="deny"/>
  </rctl>

を追加かな。


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
>>>
>>
>>
> 




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