我需要在运行Coldfusion / Apache的CentOS服务器上澄清内存使用情况。
我有一个脚本,将文件读入内存并逐行处理,插入到数据库并删除文件。 不是最好的过程,但是现在要做。
当文件被读取时,它占用大量的内存,导致服务器使用交换文件,而且它确实没有响应 – TOP中的总内存使用率为3.9 / 3.9 GB,swap为1.5 / 1.9
我不得不重新启动它,总共使用的内存下降到2GB左右,我跑了脚本,它回到了3GB。 它在过去的几个小时内缓慢增加到3.3GB – 我仍然有一些空间,网站都响应,但内存没有被释放。
此外,自从重新启动以来,FusionReactor将我的Max和Allocated Heap显示为3.93GB,使用范围从0.3GB到1GB – 这与TOP说的是不一致的,即CF9对3.9的58%,大约2.25GB
该脚本在一夜之间导入数据,所以我猜测它什么时候运行,它会溢出到交换,并在一夜之间减慢网站(低stream量过夜,但仍然需要修复 – 我必须现在停用)
所以我不明白的两件事:
fileClose – 太多的CFC?) 更新 – jvm.config,其中大部分是评论
# Where to find JVM java.home=/opt/coldfusion9/runtime/jre/ # Arguments to VM java.args=-server -Djava.awt.headless=true -Xms4096m -Xmx4096m -Dsun.io.useCanonCaches=false -XX:ParallelGCThreads=2 -XX:PermSize=64m -XX:+UseConcMarkSweepGC -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=4 -XX:+UseParNewGC -XX:MaxPermSize=192m -Dcoldfusion.rootDir={application.home}/../ -Dcoldfusion.libPath={application.home}/../lib -Dcoldfusion.classPath= {application.home}/../lib/updates,{application.home}/../lib, {application.home}/../gateway/lib/,{application.home}/../wwwroot/WEB-INF/flex/jars, {application.home}/../wwwroot/WEB-INF/cfform/jars - javaagent:/opt/fusionreactor/instance/coldfusion.CF9Standalone.cc02/ fusionreactor.jar=name=coldfusion.CF9Standalone.cc02,address=8088 # commas will be converted to platform specific separator and the result will be passed # as -Djava.ext.dirs= to the VM java.ext.dirs={jre.home}/lib/ext # where to find shared libraries java.library.path={application.home}/../lib system.path.first=false # set the current working directory java.user.dir={application.home}/../../lib # JVM classpath java.class.path={application.home}/servers/lib,{application.home}/../lib/ macromedia_drivers.jar, {application.home}/lib/cfmx_mbean.jar,{application.home}/../lib/oosdk/classes, {application.home}/../lib/oosdk/lib,{application.home}/lib
你的堆设置configuration4gig不是2 – 这就是Xms4096m -Xmx4096m告诉你的。 烫发大小增加了另外200 megs。 你的新尺寸(年轻人在一次手术中获得的金额)非常高 – 通常这个数字在64到256米之间 – 给年轻人上下铺路。
所以,你看到3.9克的活动是正确的 – 虽然我期望看到像4.2。 有时候,仍然使用JVM分配进行奇数运算。
ColdFusion / Jrun将文件作为一个整体读入内存(到堆中)是正确的 – 所以你的堆需要足够大以适应这个问题。 不过,即使是一个小文件,如果它触发了年轻一代,也会因为你的newsize参数而导致完整的GB分配。
如果你在服务器上只有4个演出,我的build议是你设置newsize和maxnewsize为256m,并把你的堆设置为3072m像这样Xms3072m -Xmx3072m
这些设置适用于64位CF 9服务器 – 如果你正在运行32位,那么由于所有32位平台原生的连续内存问题,你有2堆性能的限制。 祝你好运。