Grails的Quartz插件 - 生产环境中的OutOfMemoryError

时间:2013-02-02 13:46:56

标签: grails quartz-scheduler cloudfoundry

我正在尝试将我的Grails 2.1.1应用程序部署到cloudfoundry.com。在我的本地计算机上运行应用程序没有问题。从BuildConfig.groovy中删除Quartz插件依赖项时,我能够成功地在cloudfoundry上启动应用程序。

相关性:

compile ":quartz:1.0-RC5"

grails cf-logs显示以下错误:

Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space

下面看我的工作:

package de.tum.wi.fm.game
import org.quartz.JobExecutionContext

class StartGameJob {
    def execute(JobExecutionContext context) {
        def gameRoundId = context.mergedJobDataMap.get('gameRoundId')

        if(gameRoundId) {
            GameRound gameRound = GameRound.get(gameRoundId)
            if(gameRound) {
                Game game = gameRound?.game
                game.currentGameRound = gameRound
                game.save(flush: true)
            }
        }
    }
}

触发器放在服务中:

def jobParams = [gameRoundId:gameRound.id]
Date gameRoundEndDate = gameRound.endDate.toDate()
ChangeRoundJob.schedule(gameRoundEndDate, jobParams)

2 个答案:

答案 0 :(得分:0)

您是否尝试过为应用程序分配更多内存?您可以使用VMC执行此操作;

vmc scale [application name]

按照提示操作,VMC应询问您要分配多少内存。

答案 1 :(得分:0)

OutOfMemoryError异常确定JVM没有分配足够的内存。您需要增加cloudfoundry实例的内存,从而增加JVM的内存。

在部署应用程序时尝试执行以下命令:

grails -Dgrails.env=production cf-push --memory=2048 --no-start
grails -Dgrails.env=production cf-env-add JAVA_OPTS -Xmx1024m -XX:MaxPermSize=512m
grails -Dgrails.env=production cf-start

第一个命令会将应用程序推送(部署)到cloudfoundry实例中,但不会启动它。

第二个将设置JVM环境变量,足够的内存设置。

第三个命令启动应用程序。