высокое использование памяти подкачки - PullRequest
1 голос
/ 15 февраля 2012

Конфигурация сервера:

  1. Физический ОЗУ - 16 ГБ
  2. Память подкачки - 27 Гб
  3. ОС - Solaris 10
  4. Физическая память свободна - 598 Мб
  5. Используется подкачка памяти - ~ 26 Гб
  6. Версия Java - виртуальная машина сервера Java HotSpot (TM) - 1.6.0_17-b04

Моя задача - уменьшить объем используемой подкачки: - Решения, которые у меня есть, хотя

  1. Остановите все Java-приложения и подождите, пока физическая память не освободится.затем выполните команду "swapoff -a" (чтобы узнать эквивалент этой команды в Solaris) ... подождите, пока используемая память подкачки не упадет до нуля.затем выполните команду "swapon -a"
  2. Увеличение физической памяти

Мне нужна помощь по следующим пунктам: -

  1. Что такое солярис эквивалентный swapoff и swapon?
  2. Будет ли работать вариант 1 для очистки используемого свопа?

Спасибо за миллион !!!

Ответы [ 3 ]

7 голосов
/ 16 февраля 2012

Во-первых, Java и своп не смешиваются. Если ваше Java-приложение подкачки, вы просто обречены. Немногие вещи убивают машину, как процесс обмена Java. GC и своп это просто кошмар.

Итак, учитывая, что если ваша машина с Java-процессом меняет местами - эта машина слишком мала. Получите больше памяти или уменьшите нагрузку на компьютер (включая, если возможно, кучу процесса Java).

Тот факт, что на вашем компьютере нет физической памяти (600 Мб) и нет свободного места подкачки (1 Гб), является еще одним индикатором перегрузки машины.

При исчерпании ресурсов возможны ошибки в процессе Java.

Уничтожение процесса Java «вытащит его из свопинга», поскольку процесс не существует, он не может быть в свопе. То же самое для всех других процессов. «Подкачка памяти» может не мгновенно завершиться, но если процесс не существует - он не может поменяться (за исключением использования постоянных буферов общей памяти, которые могут быть выгружены, а Java обычно не использует тех.)

На самом деле я не знаю, как можно сказать ОС, чтобы заблокировать конкретную программу в физической памяти и предотвратить ее выгружение. И, честно говоря, вы не хотите.

Что бы ни занимало всю вашу оперативную память, вам нужно серьезно подумать об уменьшении ее занимаемой площади или переносе процесса Java с этой машины. Вы просто бежите в жесткие пределы, и в этом камне больше нет крови.

0 голосов
/ 20 июня 2019

немного опоздал на вечеринку, но для Соляриса:

перечислить детали пространства подкачки с помощью:

swap -l

, в котором перечислены разделы подкачки. например:

swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 136,1 16 1206736 1084736
/export/data/swapfile -16 40944 40944

эквивалент обмена:

swap -d <file or device>

Например:

swap -d /dev/dsk/c1t0d0s3

эквивалент swapon:

swap -a <file or device>

например:

swap -a /dev/dsk/c1t0d0s3

Примечание. Возможно, вам придется создать устройство, прежде чем вы сможете использовать ключ -a, отредактировав файл / etc / vfstab и добавив информацию, описывающую фрагмент подкачки. например:

/dev/dsk/c1t0d0s3 --swap -no -
0 голосов
/ 15 февраля 2012

Мне не совсем понятно, о чем вы спрашиваете - остановка приложений, которые занимают память, должна освободить память (и потенциально поменять место). Из вашего описания не ясно, что Java занимает всю память на вашем устройстве - обычно нет причин запускать JVM, выделяя больше памяти, чем физической памяти на устройстве. Проверьте, как вы запускаете JVM и сколько памяти выделяется.

Вот как управлять свопом в Solaris:

http://www.aspdeveloper.net/tiki-index.php?page=SolarisSwap

...