[mayaa-user:957] Re: Mayaa内部にコンカレントの不具合の可能性を見つけました

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2013年 2月 5日 (火) 15:52:17 JST


suga様

素早いご対応、ありがとうございます。
念のため、こちらでベンチマークを取ってみましたが
パフォーマンスの影響はほぼありませんでした。
(業務用のコードで行ったため、結果は公にできず申し訳ありません。むしろ1.1.31の方が良かったです。誤差の範囲ですが。。。)
動作上も私が見た限り問題が無さそうでしたので、早速使わせて頂きます。

ReferenceMapでソースを検索してみたところ、
他にも複数Synchronizedにしていない箇所がありました。
以下もご対応頂けませんでしょうか?
・AbstractServiceCycle
・FormatNumberProcessor
・JspProcessor
・PrefixAwareNameImpl
・PrefixMappingImpl
・DateFormatPool
・StringUtil

以上、よろしくお願い致します。




2013年2月4日 22:49 suga <ko.suga @ gmail.com>:

> suga です。
>
> 1.1.31-SNAPSHOT を作成して置きました。
> これでいかがでしょうか。
>
>
> http://maven.seasar.org/maven2-snapshot/org/seasar/mayaa/mayaa/1.1.31-SNAPSHOT/mayaa-1.1.31-20130204.131449-1.jar
>
> パフォーマンスに関しては、当時と環境が全然異なるため、また計測して問題にならない限り
> 優先度を落として良いと考えています。
>
>
>
>
> --
> suga ( ko.suga @ gmail.com )
>
>
> 2013/2/4 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>
>
>>  石上です。
>> いつもお世話になっております。
>>
>> 私の所で、Mayaaを利用させていただいているサービスの
>> スレッドダンプを解析していたところ、
>> HashMapのコンカレントの不具合らしき箇所が見受けられたため、
>> 報告致します。
>>
>> スレッドダンプには以下のスタックトレースが複数見られました
>>
>> "TP-Processor218" daemon prio=1 tid=0x00007f04281c59e0 nid=0x5e52
>> runnable [0x00007f0407dfa000..0x00007f0407dfc890]
>> at
>> org.apache.commons.collections.map.AbstractHashedMap.getEntry(AbstractHashedMap.java:433)
>>  at
>> org.apache.commons.collections.map.AbstractReferenceMap.getEntry(AbstractReferenceMap.java:404)
>> at
>> org.apache.commons.collections.map.AbstractReferenceMap.get(AbstractReferenceMap.java:229)
>>  at
>> org.seasar.mayaa.impl.engine.specification.QNameImpl.getInstance(QNameImpl.java:51)
>> at
>> org.seasar.mayaa.impl.engine.specification.SpecificationUtil.createQName(SpecificationUtil.java:246)
>>  at
>> org.seasar.mayaa.impl.engine.specification.SpecificationUtil.createQName(SpecificationUtil.java:241)
>> at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
>>  at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>>  at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:161)
>>
>>
>> QNameImpl.java:51を確認させていただいたところ
>>
>>         // 一時的に重複しても問題ないので速度を優先する。(synchronizeを外した)
>>         QName result = (QName)_cache.get(key);
>>
>> という記載があります。
>>         _cache
>> の定義は
>>         private static volatile Map _cache =
>>                 new ReferenceMap(AbstractReferenceMap.HARD,
>> AbstractReferenceMap.SOFT, true);
>> となっております。
>>
>> ここで、ReferenceMapのJavaDocを参照したところ
>>
>> http://commons.apache.org/collections/api-3.1/org/apache/commons/collections/map/ReferenceMap.html
>>
>> This implementation is not synchronized. You can use
>> Collections.synchronizedMap<http://java.sun.com/j2se/1.3/docs/api/java/util/Collections.html#synchronizedMap> to
>> provide synchronized access to a ReferenceMap. Remember that
>> synchronization will not stop the garbage collecter removing entries.
>>
>> という記載されています。
>>
>> パフォーマンスについてセンシティブな部分と思いますが、
>> ご確認いただけませんでしょうか?
>>
>> 何卒よろしくお願い致します。
>>
>>
>>
>>
>> --
>> Susumu ISHIGAMI
>>
>> _______________________________________________
>> 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
>



-- 
/**
* Java Web Programmer
* interested in Mayaa PostgreSQL Tomcat Pivotal Tracker
* @twitter  http://twitter,com/susumuis
* @blog     http://d.hatena.ne.jp/s-ishigami/
* @github  http://github.com/susumuishigami
* @gmail   susumu.ishigami @ gmail.com
*/
Susumu ISHIGAMI
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/mayaa-user/attachments/20130205/6964ba4c/attachment.html>


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