首页 > 解决方案 > Java进程在短时间内挂起

问题描述

我在 VMWare Linux 来宾上运行我的应用程序,但效果不佳。

我编写了另一个简单的计数器来在同一个客人上运行以进行测试。(每 0.5 秒添加一次计数器)

应用程序停止时计数器工作正常,

但在应用程序运行时很快挂起(标记时间和数字)。

  10:21:24.386 : 166
  10:21:25.154 : 167
  10:21:25.971 : 168
  10:21:25.971 : 169 <--
  10:21:26.957 : 170
  10:21:26.957 : 171 <--
  10:21:27.848 : 172
  10:21:27.885 : 173
  10:21:28.776 : 174
  10:21:28.884 : 175
  10:21:30.374 : 176
  10:21:30.374 : 177 <--
  10:21:30.379 : 178
  10:21:31.264 : 179
  10:21:31.380 : 180
  10:21:32.155 : 181
  10:21:32.933 : 182
  10:21:32.933 : 183 <--

计数器代码如下所示,但我认为没有问题

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    scheduler.scheduleAtFixedRate(new Runnable(){
        int i=0;
        @Override
        public void run() {
            Calendar cal = Calendar.getInstance();
            System.out.println(sdf.format(cal.getTime()) + " : " + i);
            i++;
        }
    }, 500, 500, TimeUnit.MILLISECONDS);

这是应用程序运行时的最佳结果

top - 11:02:49 up 20:49,  5 users,  load average: 12.87, 14.66, 13.22
Tasks: 196 total,   5 running, 190 sleeping,   0 stopped,   1 zombie
%Cpu0  : 77.3 us, 20.5 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  2.3 si,      0.0 st
%Cpu1  : 82.4 us, 16.5 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  1.1 si,  0.0 st
KiB Mem : 16267652 total,  7639820 free,  7309136 used,  1318696 buff/cache
KiB Swap:  8257532 total,  8257532 free,        0 used.  8588648 avail Mem

似乎我的应用程序资源不足并使 JVM 无法正常工作?

除了给guest增加更多的资源,有没有什么办法可以减少资源消耗?

使用 jmap -histo 查找最常用的对象并检查它?

她的环境信息

java版本“1.8.0_181”

CentOS Linux 版本 7.5.1804(核心)

VMware 6.0

标签: javavmware

解决方案


推荐阅读