Java进程在Linux上被卡住(?)

标签 java linux file multiprocessor

这是我关于 S.O. 的第一个问题
我有一个很奇怪的问题。
下面是我的问题...

我写了一个非常简单的方法,将一些文本写入文件。
当然在我的机器(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) break... 今天又发生了 Thread.sleep(XX)...

你知道这个问题吗? 你对此有什么解决办法吗? 谢谢。 :-)

附言
Linux 发行版:Red Hat Linux 3.2.2-5
命令:java -cp 。

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();
}
}

最佳答案

如果 JVM 不响应 kill -3,那么失败的不是您的程序而是 JVM,这很糟糕,需要向 Sun 报告错误。

我注意到您正在运行 2.4.20-8smp 内核。这不是当前开源 Linux 发行版的典型内核,因此我建议您查看 http://java.sun.com/j2se/1.5.0/system-configurations.html。查看您是否正在部署到受支持的配置。如果没有,您应该让负责人知道这一点!

关于Java进程在Linux上被卡住(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1872317/

相关文章:

java - Jenkins-Traub算法开源java移植?

linux - Ubuntu 20.04 - VPN 连接失败 - 找不到源连接

javascript - 使用 JavaScript 读取本地文件 : single file equivalent for files property

java - 如何存储某个鼠标位置以用作原始点

java - Hazelcast 中复杂类的序列化

linux - 更高效的 shell 文本操作

json - 尝试通过提取读取json文件时出现错误

c - 如何根据扩展名动态获取文件名?

java - Serenity 报告不显示表格、饼图、 Logo 等

Linux 恢复删除的目录