オブジェクト単位のログ出力を、バイナリ形式で行おうとしたところ、問題が発生しました。
| <発生環境> | |
|---|---|
| OS | Solaris2.5.1 |
| JDK | JDK1.2.1 |
| Vender | Sun |
- <A4-1>
- ファイルをクローズすると、バイナリの終端情報がファイルに付加されます。
そのため、その後更にオープン・クローズを繰り返しても、終端情報以降を利用することができません。
1ファイルに連続して書き込むのであれば、ファイルをオープンし続けるか、テキスト形式への変更が必要です。
オブジェクト単位のログ出力を、バイナリ形式で行おうとしたところ、問題が発生しました。
| <発生環境> | |
|---|---|
| OS | Solaris2.5.1 |
| JDK | JDK1.2.1 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Windows |
| JDK | JDK1.3.0 |
| Vender | Sun |
マシンが高負荷である状態で、サウンド鳴動が停止せずアプリケーションが操作不能になりました。アプリケーションを再起動すると回復します。
| <発生環境> | |
|---|---|
| OS | Windows NT/2000/XP |
| JDK | JDK1.3 |
| Vender | Sun |
私のプログラムが止まっている様です。コンソールにもログファイルにも何も出力しないため、何が起こっているかわかりません。
解析方法を教えてください。
| <発生環境> | |
|---|---|
| OS | Any |
| JDK | JDK1.2以降 |
| Vender | Sun |
Full thread dump Java HotSpot(TM) Client VM (1.4.1_01-b01 mixed mode):
"DestroyJavaVM" prio=5 tid=0x00034788 nid=0x764 waiting on condition [0..7fadc]
"Thread-2" prio=5 tid=0x00A12430 nid=0xaf4 waiting for monitor entry [acef000..acefd8c]
at sample.deadlock.DeadLock.lock(DeadLock.java:29)
- waiting to lock <02AA3B28> (a java.lang.Object)
at sample.deadlock.DeadLock.run(DeadLock.java:47)
- locked <02AA3B30> (a java.lang.Object)
"Thread-1" prio=5 tid=0x00A12EB0 nid=0x5cc waiting for monitor entry [acaf000..acafd8c]
at sample.deadlock.DeadLock.lock(DeadLock.java:29)
- waiting to lock <02AA3B30> (a java.lang.Object)
at sample.deadlock.DeadLock.run(DeadLock.java:47)
- locked <02AA3B28> (a java.lang.Object)
==== 中略 ====
"Suspend Checker Thread" prio=10 tid=0x009A8530 nid=0xb08 runnable
Found one Java-level deadlock:
=============================
"Thread-2":
waiting to lock monitor 0x9a4b7c (object 0x2aa3b28, a java.lang.Object),
which is held by "Thread-1"
"Thread-1":
waiting to lock monitor 0x9a4b5c (object 0x2aa3b30, a java.lang.Object),
which is held by "Thread-2"
Java stack information for the threads listed above:
=================================
"Thread-2":
at sample.deadlock.DeadLock.lock(DeadLock.java:29)
- waiting to lock <02AA3B28> (a java.lang.Object)
at sample.deadlock.DeadLock.run(DeadLock.java:47)
- locked <02AA3B30> (a java.lang.Object)
"Thread-1":
at sample.deadlock.DeadLock.lock(DeadLock.java:29)
- waiting to lock <02AA3B30> (a java.lang.Object)
at sample.deadlock.DeadLock.run(DeadLock.java:47)
- locked <02AA3B28> (a java.lang.Object)
Found 1 deadlock.
上の例では、"Thread-1"と"Thread-2"がlock()メソッドでロックしており、そのデッドロックをJavaVMが検出/指摘していることが分かります。
| <発生環境> | |
|---|---|
| OS | Solaris |
| JDK | JDK1.3.0 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Solaris2.6 |
| JDK | JRE1.3 |
| Vender | Sun |
【発生条件】
| <発生環境> | |
|---|---|
| OS | Solaris2.8 |
| JDK | JDK1.3.0 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | デバッグ対象:RedHatLinux6.2 SMP |
| JDK | JDK1.3 |
| Vender | Sun/IBM |
Java2Dを使用したアプリケーションを作成していますが、
実行中、コンソールに以下のメッセージが表示されて、終了してしまいます。
# EXCEPTION_ACCESS_VIOLATION (0xcFF00005) at pc=0x6d1c5c68, pid=2608, tid=2140
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0-b64 mixed mode, sharing)
# Problematic frame:
# C [dcpr.dll+0x5c68]
#
# An error report file with more information is saved as hs_err_pid2608.log| <発生環境> | |
|---|---|
| OS | Windows XP SP2 |
| JDK | 5.0 Update4 |
| Vender | Sun |
BufferedImage im = new BufferedImage(640, 480,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = im.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
GeneralPath path = new GeneralPath();
path.moveTo(0, 0);
path.lineTo(634, 57);
path.lineTo(640, 65);
path.closePath();
g2d.draw(path);
現状、根本的な解決方法はありません。以下のような単純な処理です。
string.matches("(.*\n*)*")| <発生環境> | |
|---|---|
| JDK | 1.5.0_05 |
以下のように、Propertyを繰り返し生成し、getPropertyで存在しないキーを指定すると、StackOverFlowが発生する可能性があります。
for(int num=0; num > 10000&; num++)
{
Properties p = new Properties(System.getProperties()); ・・・①
Properties System.setProperties(p); ・・・②
}
System.getProperty("test");| <発生環境> | |
|---|---|
| JDK | 1.5.0_12 |
Properties p = System.getProperties();
System.setProperties(p);
参考) Exception in thread "main" java.lang.StackOverflowError
at java.util.Hashtable.get(Hashtable.java:334)
at java.util.Properties.getProperty(Properties.java:932)
at java.util.Properties.getProperty(Properties.java:934)
at java.util.Properties.getProperty(Properties.java:934)
at java.util.Properties.getProperty(Properties.java:934)
at java.util.Properties.getProperty(Properties.java:934)
at java.util.Properties.getProperty(Properties.java:934)
at java.util.Properties.getProperty(Properties.java:934)
at java.util.Properties.getProperty(Properties.java:934)
==== 以下省略 ====WindowsやLinux上で通常動作しているネットワークプログラムを特定のLinuxで動作させると
しばらくするとHotSpot Virtual Machine Errorが発生することがあります。
| <発生環境> | |
|---|---|
| OS | Redhat Enterprise Linux 4 |
| JDK | JDK 1.5.0 |
複数のWebアプリケーションをtomcat上で動かしています。
メモリを大量確保していないアプリケーションばかりなのですが、
長時間運用しているとOutOfMemoryErrorが発生してしまい、
tomcatが異常終了してしまいます。
表示されるエラーメッセージは以下の通りです。
Exception in thread "xxxx" java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)| <発生環境> | |
|---|---|
| OS | Any |
| JDK | Any |
正常動作していたアプリケーションを処理解析用に修正し、
定期的にスタックトレースを表示するようにしました。
その結果、長時間運用中にOutOfMemoryErrorが発生して、
アプリケーションが強制終了してしまいました。
表示されるエラーメッセージは以下の通りです。
Exception java.lang.OutOfMemoryError: requested 128 bytes for GrET* in
/BUILD_AREA/jdk1.5.0_14/hotspot/src/share/vm/utilities/growableArray.
cpp. Out of swap space?| <発生環境> | |
|---|---|
| OS | Any |
| JDK | JDK 5.0 |
RMI通信を行っているアプリケーションに対して、
RMIServerSocketFactoryとRMIClientSocketFactoryをオーバライドしたクラスを作成し、
SSL通信を行えるようにしたところ、
Memoryが大量に消費され、アプリケーションが停止します。
| <発生環境> | |
|---|---|
| OS | Any |
| JDK | JDK5.0以降 |
| Vender | Sun |
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + port;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final SampleServerSocketFactory other =
(SampleServerSocketFactory) obj;
if (port != other.port)
return false;
return true;
}注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
エスエムジー株式会社は一切関知いたしません。