Java非阻塞语句之间的执行延迟

标签 java jvm real-time delay nonblocking

我在我们的一个 Java 程序中遇到了一个奇怪的问题。有时,一些线程会随机延迟执行长达 25 秒。这种情况持续 1-2 分钟,然后应用程序恢复正常处理。这是一个具有严格时间要求的电话应用程序,因此这是 Not Acceptable 。

调用类

    OCSIHandling ocsiHandler = new OCSIHandling(this.arg0);
    ocsiHandler.run();

构造函数

    public OCSIHandling()
    {
    //This is the last statement of the constructor after initializations
            logger.info("[" + refId + "][OCSI] SMS IDP");
    }

类方法

    run(){
    //This is the first statement of the method which is executed with delay
    logger.info("[" + refId + "][OCSI] in run()");
    }

问题期间的示例日志

信息 2014-02-07 06:03:27,674 [Thread-143840672] 100 - [MGW070214060327d384][OCSI] SMS IDP 信息 2014-02-07 06:03:49,771 [Thread-143840672] 123 - [MGW070214060327d384][OCSI] 在 run()

执行有延迟,49-27 = 22秒

程序正在使用 32 位 HotSpot 服务器 VM 的 -server 选项运行。在此期间,日志记录按时间顺序也困惑了。 1:00:01 时间戳写在 1:00:00 之前,依此类推。没有线程池。

我们在 vmware 客户端上使用 centos 5.4,64 位。应用程序是 CPU 密集型的,并且没有太多内存需求(它以 1GB 的默认堆大小运行),所以我不确定 GC 是否会导致这么大的延迟。

日志文件: http://pastebin.com/fpxYBYew

请指出哪些可能因素会导致这种行为。

编辑:这发生在非高峰

最佳答案

您是否遇到了垃圾收集问题?运行程序时,将以下选项添加到 java 命令中(这些选项将包含在主类名称之前或 -jar 选项之前): -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails

这将导致有关垃圾收集器性能的详细信息打印到控制台(您可能需要将输出重定向到文件)。有免费程序可用于分析输出,但就您而言,只需查找完整的垃圾收集并检查它们所花费的时间就足够了。

关于Java非阻塞语句之间的执行延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594071/

相关文章:

java - 如何将 [[Ljava.lang.String;@7defb4fb] 转换为字符串

java - 如何清空java线程栈内存区域?

c++ - 在实时视频上检测 SURF 点

javascript - Node.js/socket.io 设计困惑

database - mongodb 支持多少个开放的变更流?

java - Admob 横幅广告空间不足

java - 拥有多个可关闭资源的类的正确用法

java - 使用 Groovy 将 bean 序列化和反序列化为 json

linux - Elasticsearch 线程的行为彼此不同

java - 如何在 Java 中更优化地运行一个非常小的程序