Потребление памяти ActiveMQ через крышу (файл подкачки) ... что делать? - PullRequest
2 голосов
/ 29 ноября 2010

Мы используем более старую версию ActiveMQ (5.3.2) (см .: Надежен ли activemq? )

Мы убрали постоянство, потому что нам нужно было больше скорости. Наш работник может не отставать от сообщений, но, хотя очередь, как правило, находится в состоянии ожидания 0, после обработки около 45000 сообщений (длина сообщения обычно составляет 100 символов), размер файла Page составляет 8 ГБ !! Это не останавливается на достигнутом, продолжается до 15 ГБ (наш сервер имеет 16 ГБ памяти)!

Остановка процесса ActiveMQ не очищает этот файл подкачки, он остается таким огромным неопределенно долго.

это настройки, которые мы используем:

<policyEntry queue=">" producerFlowControl="false" memoryLimit="2gb">
</policyEntry>

и

<systemUsage>
    <systemUsage>
        <memoryUsage>
            <memoryUsage limit="20 mb"/>
        </memoryUsage>
        <storeUsage>
            <storeUsage limit="1 gb"/>
        </storeUsage>
        <tempUsage>
            <tempUsage limit="100 mb"/>
        </tempUsage>
    </systemUsage>
</systemUsage>

Что нам нужно сделать, чтобы сохранить использование памяти на «нормальном» уровне?

Наш сервер: Windows 2003 (64bit). ActivemQ (5.3.2), с битом Java64 (1.6.0__22)

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

Я не сталкивался с какими-либо проблемами на компьютере с Windows 7, с ActiveMQ 5.3.0, jdk1.6.0_18 (64 бит) и тестовой настройкой с PHP. С некоторыми тестовыми сценариями я записал 10.000.000 сообщений в очередь за 585 секунд. Это около 17000 сообщений в секунду. Все работало на одной машине (мой ноутбук, 4 Гб памяти, процессор Intel i3) и с использованием сокетов TCP для подключения к очереди.

1 голос
/ 14 декабря 2010

Можете ли вы опубликовать свою полную конфигурацию ActiveMQ?Вы установили persistent = false на брокере ActiveMQ?Я думаю, что происходит из-за того, что вы отключили управление потоком и позволили брокеру использовать только 20 МБ памяти - ваши сообщения переносятся на диск во временное хранилище.Если persistent = false, этого не должно происходить - но включите управление потоком - это поможет;)

1 голос
/ 29 ноября 2010

Если память не освобождается даже после остановки ActiveMQ, я испытываю желание сказать, что это ошибка в JDK.Вы рассматривали возможность перехода на более стабильную версию?Также поэкспериментируйте с этим 32-битным JDK и посмотрите, сможете ли вы воспроизвести проблему с меньшим максимальным значением памяти.

...