Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当没有人观看时,软件会做什么?(关于Java无响应程序)_Java_Multithreading_Logging_Thread Safety - Fatal编程技术网

当没有人观看时,软件会做什么?(关于Java无响应程序)

当没有人观看时,软件会做什么?(关于Java无响应程序),java,multithreading,logging,thread-safety,Java,Multithreading,Logging,Thread Safety,从我上小学开始,我就一直在想这个问题,现在我想我已经面临了一个现实生活中的情景。2条连续日志语句中存在无法解释的延迟,详情如下: 我将slf4j与logback一起使用,以下是我在日志中得到的信息: INFO 2014-01-15 01:01:12,215 [Thread-38005034] 185 - REQ Rcvd:68506950 INFO 2014-01-15 01:01:34,183 [Thread-38005035] 123 - [MGW150114010112fc1b][OC

从我上小学开始,我就一直在想这个问题,现在我想我已经面临了一个现实生活中的情景。2条连续日志语句中存在无法解释的延迟,详情如下:

我将slf4j与logback一起使用,以下是我在日志中得到的信息:

 INFO 2014-01-15 01:01:12,215 [Thread-38005034] 185 - REQ Rcvd:68506950
 INFO 2014-01-15 01:01:34,183 [Thread-38005035] 123 - [MGW150114010112fc1b][OC]923029563761->8803026062143 rDialogID: 68506950
这两行的打印不应有时间延迟,但第二行的打印时间超过20秒

这是我的密码:

public void onRequest(final DPRequest arg0) {
        new Thread() {
            @Override
            public void run() {
                Request idp = new Request();
                idp.arg0 = arg0;
                Thread dpThread = new Thread(idp);
                dpThread.start();
                logger.info("REQ Rcvd:" + arg0.getId());
            }
        }.start();
    }
这是请求类

@Override
    public void run() {
        processdp();
    }

    public void processdp() {
            OCHandling ocsiHandler = new OCHandling(this.arg0);
            ocHandler.run();
    }
这是OCHandling课程

public void run() {
        logger.info("[" + refId + "][OC]" + PNumber + "->" + CNumber + " rDialogID: " + arg0.getId());
}
onRequest函数每秒接收近50个请求,这是我第一次看到如此大的延迟,而且只发生了不到一分钟,您认为问题出在哪里

  • 线程数:我已检查是否正常
  • 记录器未写入实时日志?编辑->我发现这不是问题
  • 任何阻塞请求,此进程在此插槽中没有给定时间
  • Java不通过引用传递参数,因此调用onRequest方法的API不可能干预参数或我不知道的任何事情
  • 此程序正在ESXI服务器上的VM上运行

  • 原来是压实问题


    以前从未听说过,我想不出gc在收集未引用内存时需要停止所有其他线程的原因,但是读到这一点,它解决了这个谜。感谢您指向gc,这导致了这种压缩现象。

    可能是垃圾收集器吗?这是在运行一段时间后发生的吗?GC花费了太多的时间来清理是否有任何引用?是否有太多的线程在运行?@Vijay:是的,线程正在运行,但我正在寻找任何可靠的引用或源,如果线程数量过多,则可能存在已知问题,我看到的最大线程数约为500个,可能是IO问题。如果没有看到所有的代码,就很难说清楚。你的应用程序IO密集吗?除了日志记录,我是说。。。我建议您传入自己的(字符串)时间戳,看看是否看到相同的行为。我会添加更多的日志记录(在线程创建之前/之后等),以查看是否有特定的行运行缓慢。。。