[mayaa-user:1086] Re: PageImplのsynchronizedブロックに関する質問

Mizuno Ken mizuno.ken @ interfactory.co.jp
2017年 8月 9日 (水) 15:58:40 JST


suga様

アドバイスありがとうございます。検証してみます。
対応するのが少し後になってしまうかもしれませんが、結果が出たらまた相談させてください。

よろしくお願いいたします。


2017年8月7日 6:30 suga <ko.suga @ gmail.com>:
> 水野さま
>
>> 2. これらのsynchronizedブロックについて、並列性を向上させる方法はありますでしょうか?
>
> ひとまず、単純に synchronized を削ったものを作って、パフォーマンスにどの程度の差が出るかを計測してみてはいかがでしょうか。
> その結果工数をかける効果があると判断したならちゃんとした実装を考えるということで良いと思います。
>
>
> 2017年8月4日(金) 17:55 Mizuno Ken <mizuno.ken @ interfactory.co.jp>:
>>
>> お世話になっております。水野です。
>>
>> 先日の質問では、suga様に丁寧な回答をいただきありがとうございました。おかげさまで目的通りの修正ができました。
>>
>> さて、今回は高負荷時のパフォーマンスに関するご相談です。
>> 現在、弊社サービスにおける高負荷時のパフォーマンスチューニングを行っております。
>> その中でスレッドダンプを取得して調査していたところ、下記のようなダンプが多数記録されていました。
>>
>> ===
>> Thread 14609: (state = BLOCKED)
>>  -
>> org.seasar.mayaa.impl.engine.PageImpl.getTemplateFromFixedSuffix(java.lang.String,
>> java.lang.String) @bci=24, line=139 (Compiled frame)
>>  - org.seasar.mayaa.impl.engine.PageImpl.getTemplate(java.lang.String,
>> java.lang.String) @bci=29, line=162 (Compiled frame)
>>  - org.seasar.mayaa.impl.engine.RenderUtil.getTemplate(java.lang.String,
>> org.seasar.mayaa.engine.Page, java.lang.String, java.lang.String)
>> @bci=92, line=299 (Compiled frame)
>> ...
>>
>> Thread 13378: (state = BLOCKED)
>>  -
>> org.seasar.mayaa.impl.engine.processor.ComponentRenderer.findDoRender(org.seasar.mayaa.engine.Template[],
>> java.lang.String) @bci=5, line=100 (Compiled frame)
>>  -
>> org.seasar.mayaa.impl.engine.processor.ComponentRenderer.renderTemplate(org.seasar.mayaa.engine.Page,
>> org.seasar.mayaa.engine.Template[]) @bci=27, line=59 (Compiled frame)
>>  - org.seasar.mayaa.impl.engine.RenderUtil.renderPage(boolean,
>> org.seasar.mayaa.engine.TemplateRenderer, java.util.Map,
>> org.seasar.mayaa.engine.Page, java.lang.String, java.lang.String)
>> @bci=175, line=349 (Compiled frame)
>>  -
>> org.seasar.mayaa.impl.engine.processor.InsertProcessor.doStartProcess(org.seasar.mayaa.engine.Page)
>> @bci=286, line=327 (Compiled frame)
>>  -
>> jp.co.interfactory.ebisu.common.mayaa.processor.EbisuInsertProcessor.doStartProcess(org.seasar.mayaa.engine.Page)
>> @bci=2, line=16 (Compiled frame)
>>  -
>> org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(org.seasar.mayaa.engine.Page,
>> org.seasar.mayaa.engine.processor.TemplateProcessor) @bci=60, line=134
>> (Compiled frame)
>> ...
>>
>> Thread 13336: (state = BLOCKED)
>>  - org.seasar.mayaa.impl.engine.EngineImpl.build(boolean) @bci=3,
>> line=264 (Compiled frame)
>>  - org.seasar.mayaa.impl.engine.EngineImpl.build() @bci=2, line=260
>> (Compiled frame)
>>  -
>> org.seasar.mayaa.impl.engine.EngineImpl.doPageService(org.seasar.mayaa.cycle.ServiceCycle,
>> java.util.Map, boolean) @bci=1, line=350 (Compiled frame)
>>  - org.seasar.mayaa.impl.engine.EngineImpl.doService(java.util.Map,
>> boolean) @bci=36, line=481 (Compiled frame)
>>  -
>> org.seasar.mayaa.impl.MayaaServlet.doService(javax.servlet.http.HttpServletRequest,
>> javax.servlet.http.HttpServletResponse) @bci=25, line=107 (Compiled
>> frame)
>>  -
>> org.seasar.mayaa.impl.MayaaServlet.doPost(javax.servlet.http.HttpServletRequest,
>> javax.servlet.http.HttpServletResponse) @bci=3, line=95 (Compiled
>> frame)
>>  -
>> javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest,
>> javax.servlet.http.HttpServletResponse) @bci=149, line=643 (Compiled
>> frame)
>> ...
>> ===
>>
>> これらはいずれもPageImplクラスのインスタンスに対するsynchronizedブロックとなっています。
>>
>> ここについて何かしらの性能チューニングの余地がないか調査したいのですが、すみませんがソースを読んだだけでは下記について十分理解できなかったため、教えていただけますでしょうか。
>>
>> 1. これらのsynchronizedブロックは、どのリソースを保護するためのものでしょうか?
>> 候補として、
>> - EngineImple#build() にて、_defaultSpecification フィールドへの読み書きが発生しているため、これの保護
>> - PageImple#getTemplateFromFixedSuffix() からの呼び出し先にて_specCache
>> を参照しているため、これの保護
>>
>> を行っているように見えますが、上記2つ以外にもありますでしょうか?あるいは、上記2つのうちこのsynchronizedブロックと無関係のものはありますでしょうか?
>>
>> 2. これらのsynchronizedブロックについて、並列性を向上させる方法はありますでしょうか?
>>
>> read-writeロックを使う、concurrentHashMapを使う等の一般的な手法で改善できそうな箇所について、もし候補があればお知らせいただけますでしょうか。
>>
>>
>> --
>> 株式会社インターファクトリー   水野 謙
>> mizuno.ken @ interfactory.co.jp
>>
>> 〒102-0071
>> 東京都千代田区富士見2-10-2 飯田橋グラン・ブルーム4階
>> TEL:03-5211-0056 / FAX:03-5211-0059
>> http://www.interfactory.co.jp
>> _______________________________________________
>> mayaa-user mailing list
>> mayaa-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>
>
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user



-- 
株式会社インターファクトリー   水野 謙
mizuno.ken @ interfactory.co.jp

〒102-0071
東京都千代田区富士見2-10-2 飯田橋グラン・ブルーム4階
TEL:03-5211-0056 / FAX:03-5211-0059
http://www.interfactory.co.jp


mayaa-user メーリングリストの案内