У меня проблема с управлением памятью в различных операционных системах.
Моя программа представляет собой сервер, который выполняет некоторую обработку, которая может занять несколько ГБ памяти. После этого он освобождает большую часть памяти и ждет несколько часов, пока не придет другой запрос.
В AIX и Solaris я наблюдаю следующее поведение:
Когда я освобождаю память, память не возвращается обратно в операционную систему. Объем виртуальной памяти, используемой процессом, всегда увеличивается и никогда не уменьшается. То же самое верно и для физической памяти, вплоть до ее предела. Получается, что всю эту память мы используем и в спящем режиме.
Когда эту память можно будет вернуть обратно в ОС? Как я могу это сделать?
Линукс другой: оказывается, он иногда возвращает память, но я не могу понять, когда и как. У меня есть, например, сценарий, в котором процесс перед запросом был 100 МБ, затем 700 МБ в пике, а после освобождения всего этого он уменьшился до 600 МБ. Я не понимаю - если линукс отдает память ОС, то почему не всю?