Я использую Eclipse в Ubuntu 14.04 для научных задач, и мой код потребляет много оперативной памяти. Когда я запускаю свой код в Eclipse, я вижу в System Monitor, что использование оперативной памяти достигает почти 100%, и в то же время ОС становится очень неотзывчивой (например, открытие терминала займет больше минуты). Есть ли способ ограничить объем оперативной памяти, используемый Eclipse, чтобы ОС всегда оставалась отзывчивой?
Спасибо!
решение1
Когда вы запускаете приложение в Eclipse, оно создает отдельный поток в ОС. Использование оперативной памяти этим потоком не может контролироваться Eclipse.
Один из способов избежать сбоя системы — увеличить размер раздела подкачки. Даже в этом случае система становится очень медленной, но не падает.
Есть и другие способы контролировать использование оперативной памяти приложением, например, завершить программу, когда использование превысит определенное значение. Если вы установите такие жесткие ограничения на использование памяти, то вы можете столкнуться с непредсказуемым поведением/сбоями. Смотрите ссылки ниже, в которых говорится об ограничении использования оперативной памяти.
https://unix.stackexchange.com/questions/44985/limit-memory-usage-for-a-single-linux-process
Я бы рекомендовал попытаться оптимизировать ваш код, чтобы он использовал меньше оперативной памяти, или придумать способ сбрасывать данные на жесткий диск и считывать их при необходимости, а не хранить их в оперативной памяти. Еще лучше — увеличить объем оперативной памяти!
решение2
Здесь— это скрипт Perl, решающий именно эту проблему.
ВВЕДЕНИЕ
Скрипт тайм-аута — это программа мониторинга ресурсов для ограничения времени и потребления памяти процессами, находящимися в черном ящике, в Linux. Он запускает команду, указанную вами в командной строке, и следит за потреблением памяти и времени, прерывая процесс, если он выходит за пределы, и уведомляя пользователя с помощью предустановленного сообщения.
Убийственная особенность этого скрипта (и, собственно, причина его появления) заключается в том, что он не только наблюдает за процессом, порожденным напрямую, но и отслеживает его последующие ответвления. Вы можете выбрать, будет ли область действия наблюдаемых процессов ограничена группой процессов или деревом процессов.