У меня установлена Ubuntu 12.10 (ядро 3.9.0-rc2) на VMWare. Я дал ему 512 МБ ОЗУ.
кота/Proc/MemInfo показывает:
MemTotal: 507864 KB
MemFree: 440180Процесс убит из-за слишком большой памяти?
Я хочу использовать своп (по некоторым причинам), поэтому я написал программу C, которая выделяет массив 500MB (с использованием таНос ()) и заполняет его барахлом. Однако программа будет убита, прежде чем она сможет заполнить весь массив, и на экране появится сообщение «Killed».
Я хотел спросить, является ли это нормальным поведением и в чем причина этого? По моему мнению, обмен должен использоваться, потому что свободного ОЗУ недостаточно.
Редактировать: Я не упоминал, что у меня есть обмен 1 ГБ. cat/proc/swaps показывает:
/dev/sda5 Размер: 1046524 Использовано: 14672.
«Используемое» количество увеличивается, когда я запускаю программу, использующую память. Но, как вы можете видеть, много свопов осталось. Так почему же программа должна быть «убита»?
Google для 'overcommit Linux '; и да, это настраивается и может быть отключено. Кстати, вы, вероятно, имеете в виду Ubuntu 12.10, ядро Linux находится в версии 3.8 на http://kernel.org/ (и Ubuntu 12.10, вероятно, имеет более раннее ядро). BTW, ваша память 512 МБ не полностью доступна для данных: ядро, программа и другие процессы тоже есть в этой памяти! –
Проверьте вывод 'ulimit', если разрешено 500 МБ данных. –
@ott: ulimit показывается неограниченно. –