Coldfusion "куча" JVM по сравнению с Использованием оперативной памяти

Я нуждаюсь в помощи, разъясняя использование памяти на сервере CentOS, выполняющем Coldfusion/Apache.

У меня есть сценарий, который читает файл в память, и обработайте ее линию за линией, вставляет в DB и удаляет файл. Не лучший процесс, работающий над ним, но он должен будет сделать на данный момент.

Когда файл читается, он занимается загрузками памяти, он заставлял сервер использовать файл подкачки, и это было действительно безразлично - общим Использованием оперативной памяти в TOP был 3.9/3.9 ГБ, и подкачка была 1.5/1.9

Я должен был перезагрузить его, общая используемая RAM спала приблизительно до 2 ГБ, я запустил скрипт, и это возвратилось до 3 ГБ. Это медленно увеличивается за последние несколько часов до 3.3 ГБ - я все еще получил некоторое пространство, и сайты являются все быстро реагирующими, но память не освобождается.

Также начиная с перезагрузки, FusionReactor показывает моего Max и Выделенную "кучу" как 3.93 ГБ, и Используемый в пределах от 0.3 ГБ к 1 ГБ - который несовместим тому, что говорит TOP, который является CF9 на 58% из 3,9, который составляет приблизительно 2.25 ГБ

Сценарий импортирует данные в течение ночи, таким образом, я предполагаю, когда это будет работать позже, это проникнет в подкачку и замедлит сайт в течение ночи (низкий трафик в течение ночи, но все еще нуждается в фиксации - я должен буду отключить на данный момент),

Так эти 2 вещи я не понимаю:

  • почему RAM не роняет от 3-> 2, когда файл был считан, и сценарий закончился (отсутствующий a fileClose - слишком много CFCs?)
  • почему делает мою Память FusionReactor Используемое шоу "кучи" макс. из 1 ГБ, когда TOP показывает 58% 3.9 ГБ (2.25 ГБ) для CF9

ОБНОВЛЕНИЕ - 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
2
задан 6 January 2015 в 18:14
1 ответ

В настройках кучи сконфигурировано 4 гигабайта, а не 2 - это то, что вам сообщает Xms4096m -Xmx4096m. Пермский размер добавляет еще 200 мегабайт. ваш Новый размер (количество, которое молодой генерал захватывает за одну операцию) очень велик - обычно это число составляет от 64 до 256 метров, что дает поколению пространство для передвижения вверх и вниз по молодой куче.

То, что вы видите активность 3.9g, является правильным, хотя я ожидал увидеть что-то вроде 4.2. Still Top иногда выполняет странные математические операции с выделением памяти JVM.

Вы правы, что ColdFusion / Jrun считывает файл в память (в кучу) целиком - поэтому ваша куча должна быть достаточно большой, чтобы вместить это. Тем не менее, даже небольшой файл, если он запускает молодое поколение, приведет к выделению полного гигабайта из-за вашего параметра newsize.

Если у вас всего 4 гигабайта на сервере, я бы посоветовал вам установить размер новостей и maxnewsize равными 256 м, а размер кучи - 3072 м, например, Xms3072m -Xmx3072m

Эти настройки применяются к 64 бит Сервер CF 9 - если вы используете 32-битную версию, то у вас есть жесткие ограничения в размере около 2 гигабайт для кучи из-за проблемы непрерывной памяти, присущей всем 32-битным платформам. Удачи.

2
ответ дан 3 December 2019 в 11:39

Теги

Похожие вопросы