在Java 1.6.0_27更新后,Heroku应用程序无法在60秒内启动

时间:2013-04-09 08:37:01

标签: java heroku playframework

当我使用1.6.0_20回滚到以前的版本时,我的应用程序会在60秒内启动。鉴于以下事实,我如何调试和解决问题?

  • 我的应用程序正在使用Play 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();
}   

1 个答案:

答案 0 :(得分:1)

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