2013-04-09 48 views
2

当我使用1.6.0_20回滚到以前的版本时,我的应用程序将在60秒内启动。鉴于以下事实,我该如何调试和解决问题?Java 1.6.0_27更新后Heroku应用程序无法在60秒内启动

  • 我的应用程序正在使用播放1.2.5
  • 在日志中我看到了应用程序连接到PostgreSQL数据库。这通常是R10错误发生之前的最后一个日志。

--update 我已经创建了一个插件并发出一个假端口绑定,这将在10秒后关闭。这解决了绑定问题,但现在我有一个内存问题。在高负载下,app可能会使用600M的内存。但是现在我看到〜1500M,并且在不断增加。

@Override 
public void onConfigurationRead() { 
    final int port = Integer.parseInt(Play.configuration.getProperty("http.port")); 

    try { 
     // Create a new server socket and set to non blocking mode 
     final ServerSocketChannel ssc = ServerSocketChannel.open(); 
     ssc.configureBlocking(false); 
     InetSocketAddress isa = new InetSocketAddress(port); 
     ssc.socket().bind(isa); 
     Logger.info("Fake bind to port %d", port); 

     Timer timer = new Timer(); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        ssc.socket().close(); 
        Logger.info("Fake port closed"); 
       } catch (IOException ioe) { 
        Logger.error(ioe, "Cannot close fake port"); 
       } 
      } 
     }, 10000); 
    } catch (IOException ioe) { 
     Logger.error(ioe, "Cannot open fake port"); 
    } 

    Cache.forcedCacheImpl = RedisCacheImpl.getInstance(); 
} 
+0

您的应用程序启动时是否正在运行数据库迁移?如果是这样,你可以将这些移动到一个单独的过程吗? – 2013-04-09 21:10:32

+0

不,在启动过程中没有任何要求。 – fcs 2013-04-10 07:20:36

回答

1

我已经切换到jdk 7.我的应用程序现在在40秒内启动并使用500-600MB的内存。我已经向Heroku通报了这个问题,但他们并不在乎。

+0

我们在heroku上也存在内存问题 - JDK 7是否仍在解决您的问题?你是如何切换到7的?谢谢! – 2013-05-01 16:34:49

+0

@MattHall是的JDK 7对我来说很好。为了切换到JDK 7,将一个名为system.properties的文件放在项目的根目录下,并将java.runtime.version = 1.7放入其中。 – fcs 2013-05-05 20:17:00

相关问题