У меня есть 8 ГБ ОЗУ Linux, на котором работают 4 сервера Tomcat. Один из них установлен на 3000 МБ памяти (jvm -Xms и -Xmx), а другие на 1500 МБ. Раздел подкачки также установлен на 8Gigs. Когда я запускаю эти серверы, использование файла подкачки низкое. Но в течение нескольких дней и в определенные моменты, когда один / все серверы находятся в пиковой активности, использование свопа начинает увеличиваться. Вот типичный вывод sar -r.
kbmemfree kbmemused% memused kbbuffers kbcached kbswpfree kbswpused % swpused kbswpcad
48260 8125832 99,41 196440 2761852 7197688 1190912 14,20 316044
75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032
Это показывает 14,2% своп, используемый в настоящее время. Самое смешное, что этот% НИКОГДА не уменьшается . Продолжает расти и доходить до 30-40% . Мы перезапускаем наши серверы еженедельно.
Я бы предположил, что % swpused увеличивается в периоды пиковой активности и уменьшается в периоды низкой активности. Или, по крайней мере, остается постоянным. Похоже, что пространство подкачки никогда не возвращается ОС.
Вывод free: free -m всего использованных свободных общих буферов, кэшированных. Mem: 7982 7937 45 0 32 2088 - / + буферов / кэш: 5816 2166 Swap: 8191 1163 7028
Так что есть как минимум 2 г бесплатного барана. Таким образом, вопрос в том, почему пространство подкачки продолжает увеличиваться и не используется ОС? Или как отладить это, чтобы выяснить, что происходит ..
источник
По сути, вам не нужно заботиться об этом. Важно знать, сколько IO идет на подкачку (посмотрите на команду 'vmstat'). Наличие большего количества вещей в свопе ничего не стоит. Единственная цена - это положить что-то в своп (страница в) или вынуть (страница). Поэтому для ОС вполне разумно позволить расширению свопа.
источник
до тех пор, пока у вас есть доступное пространство подкачки, ОС не нужно освобождать пространство подкачки. Он будет освобожден, когда не останется места. Но когда вы попадаете в эту ситуацию, у вас точно есть проблема.
источник
Невозможно определить, станет ли это в конечном итоге проблемой, если вы не запустите сервер достаточно долго, чтобы посмотреть, не станет ли это проблемой.
По сути, операционная система будет заменять вещи, которые не используются, для постоянного сохранения некоторой памяти в случае запуска новой программы. Пространство подкачки не будет освобождено до тех пор, пока оно не потребуется, а это означает, что вы можете использовать пространство подкачки на 100% без проблем с производительностью. О чем стоит беспокоиться, если это вызвано утечкой памяти. Это не обязательно утечка памяти, но может быть.
Java не подвержена утечкам памяти, но это может случиться со сложными приложениями, особенно.
источник