4

生産を停止しているこの問題があります。AWS/Ubuntu/Tomcat スタックでは、Tomcat を実行している CPU が 100% に跳ね上がり、スレッド ダンプを取得すると、この 1 つのコードがまったく同じ場所で常にブロックされます。(他のすべてはロックされて待機しています。)

"TP-Processor6" daemon prio=10 tid=0x0000000041ec2800 nid=0x41c4 runnable [0x00007f70194b5000]
  java.lang.Thread.State: RUNNABLE
    at sun.util.calendar.ZoneInfo.getTransitionIndex(ZoneInfo.java:322)
    at sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:248)
    at sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:225)
    at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2024)
    at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:1996)
    at java.util.Calendar.setTimeInMillis(Calendar.java:1109)
    at java.util.GregorianCalendar.<init>(GregorianCalendar.java:576)
    at java.util.Calendar.createCalendar(Calendar.java:1011)
    at java.util.Calendar.getInstance(Calendar.java:948)
    at com.xxx.core.util.DateUtil.modifyDate(DateUtil.java:385)
    at com.xxx.core.util.DateUtil.getDayDate(DateUtil.java:563)
    at com.xxx.core.util.DateUtil.getDayDate(DateUtil.java:573)
    at com.xxx.core.util.DateUtil.getDayDate(DateUtil.java:569)
    at com.xxx.core.util.DateUtil.splitByDays(DateUtil.java:496)
    at com.xxx.core.util.DateUtil.splitDateIntervalByIntervals(DateUtil.java:474)
    at com.xxx.core.util.DateUtil.splitDateIntervalByIntervals(DateUtil.java:436)
4

1 に答える 1

1

ここで何が起こっているのかを理解するために、いくつかのより良いログをラップしてください。

インスタンスが適切なエンコーディングとロケール (システム、Tomcat コンテナー、アプリケーション) を指定していることを確認してください。標準として GMT に落ち着いて、次のことを試してください。

Calendar.getInstance ("GMT-0", Locale.US); // verify inputs

カレンダーのインスタンスを取得している場合、なぜ日付を明示的に再設定するのですか? 新しいカレンダーを作成してみませんか? 次に、新しい Calendar をインスタンス化します。

Calendar cal = new Calendar (TimeZone zone, Locale aLocale); // new 
cal.setTimeZone("GMT-0"); 
cal.setTimeInMillis(System.currentTimeMillis ()); 

Calendar オブジェクトと Date オブジェクトは、Java では比較的順応性があるため、機能を変更することができます。Calendar インスタンスで試行されているものと競合しているローカルやエンコーディングなど、環境変数またはコンテナーに正しく設定されていないものがある可能性があると推測しています。すべてを明示的に指定してみてください。

それが私の最高の直感です。

于 2012-09-01T10:32:50.473 に答える