これは私の最初の質問
なので、非常に奇妙な問題があります。
以下は私の問題です...
テキストをファイルに書き込む非常に単純なメソッドを作成します。
もちろん、私のマシン (XP、4CPU、jdk1.5.0_17[SUN])では問題なく動作しますが、稼働中のサーバー
(Linux Accounting240 2.4.20-8smp、4CPU 、 jdk1.5.0_22
[SUN])
でフリーズすることがあります。
kill -3 は機能しません。
ctrl + \ は機能しません。
そのため、スレッド ダンプを表示することはできません。
それはよくフリーズします.. このメソッドで Thread.sleep(XX) を書くだけで、問題は解決しました(?)...
sleep(XX) ブレーク... 今日も Thread.sleep(XX) で発生...
この問題を知っていますか?それについて何か解決策はありますか?ありがとう。:-)
PS
Linux ディストリビューション: Red Hat Linux 3.2.2-5
コマンド: java -cp 。T
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class T {
private BufferedWriter writer = null;
private void log(String log) {
try {
if (writer == null) {
File logFile = new File("test.log");
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(logFile, true)));
}
writer.write(new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss] ")
.format(new Date()));
writer.write("[" + log + "]" + "\n");
writer.flush();
/*
* this is ad hoc solution ???
*/
//Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
public void test() {
long startTime = System.currentTimeMillis();
while (true) {
log(String.valueOf(System.currentTimeMillis()));
System.out.println(System.currentTimeMillis());
try {
//Thread.sleep((int) (Math.random() * 100));
} catch (Exception e) {
break;
}
if (System.currentTimeMillis() - startTime > 1000 * 5) {
break;
}
}
if (writer != null) {
try {
writer.close();
} catch (Exception e) {
}
}
System.out.println("OK");
}
public static void main(String[] args) {
new T().test();
}
}