【发布时间】:2014-07-14 13:34:08
【问题描述】:
我正在运行一个计划代理,它询问文件系统上的特定目录以查找图像文件并在它们超过特定文件大小时更改它们的尺寸。
我正在使用名为 ImgScalr 的 Java 图像库:http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/
我遇到的问题是,在某些图像上,进程因 java.lang.OutOfMemory 错误而失败。它所覆盖的图像比较大,通常在 5MB 到 6MB 之间。
运行它的服务器有 8GB 内存,我认为这没问题。
我的问题是代理管理器 JVM 是否使用与 HTTP 任务相同的内存设置,即 HTTPJVMMaxHeapSize?
我已将该设置增加到 1792MB,但这在图像缩减代理运行时似乎没有影响。请注意,将配置增加到高于该数字的任何值会使 HTTP JVM 在启动时抛出以下错误:HTTP JVM: JVMJ9VM015W 库 j9gc24(2) 的初始化错误:无法实例化堆; 2G 请求)
如果代理管理器不使用与 HTTP JVM 相同的设置,那么它是否有自己的设置,我们可以更改以增加可用内存以停止出现 OutOfMemory 错误?
【问题讨论】:
-
不,它不共享 HTTP JVM 的设置。代理管理器的等效设置是
JavaMaxHeapSize,但您不需要将它设置得那么高。 Domino 服务器需要大量共享内存,而将 JavaMaxHeapSize 设置得太高会在 AMGR 任务中占用太多地址空间,从而抢夺所有其他任务所需的地址空间,以便设置共享内存。如果您正在运行 32 位 Domino,8 GB 的 RAM 对您几乎没有用处,因为每个任务的最大值为 2 GB,并且所有任务的共享内存也必须超出 2 GB。 -
谢谢理查德,增加这肯定有帮助,现在它似乎只会落在更大的图像上,这更容易管理......
-
你增加了多少? 128 MB 对于几乎任何东西都应该足够了。默认值为 64 MB。如果您将其提高得更高,那么您将冒着使服务器的其他部分缺乏内存的风险。您的代码对数据库和文档的 Notes/Domino 类有什么作用吗?如果是这样,您是否检查过缺少的 recycle() 调用?
标签: java jvm out-of-memory lotus-domino lotus