Да, я знаю, что этот вопрос задавался раньше, и я пробовал все решения, которые видел, и ни одно из них не работает для меня. Мы работаем в Ubuntu 12, и у нас есть процесс, который автоматически запускается выскочкой при каждой загрузке машины. Я зашел в /etc/security/limits.conf и добавил эти строки:
* hard nofile 65000
* soft nofile 32000
root hard nofile 65000
root soft nofile 32000
Я также зашел в /etc/pam.d/common-session и добавил эту строку:
session required pam_limits.so
Чтобы это работало для неинтерактивные процессы, я также зашел в /etc/pam.d/common-session-noninteractive и добавил ту же строку.
Когда я вхожу в систему как пользователь-администратор (который находится в списке sudo, я назову этого пользователя SUDOUSER), я вижу, что теперь лимиты равны 32000, как и ожидалось, когда я выполняю ulimit -a.
Затем я перезагружаю всю машину, чтобы убедиться, что ограничения сохраняются для новых процессов, таких как процесс, который запускается выскочкой после перезагрузки.
Однако после перезагрузки, когда я смотрю на постоянный процесс который начинается во время выполнения, я получаю идентификатор процесса (скажем, 12345), а затем выполняю cat / proc / 12345 / limits и вижу, что ограничения по-прежнему установлены по умолчанию (1024 мягкие, 4096 жесткие).
Итак, что я делаю не так ?
Хорошо, я нашел решение. Оказывается, выскочка игнорирует все ограничения в pam.d и limits.conf. Способ сделать это в выскочке - явно установить ограничения в сценарии конфигурирования выскочки для процесса. Итак, предположим, что это процесс myproc, и у вас есть файл /etc/init/myconf.conf. Внутри этого скрипта просто включите эту строку где-нибудь в самом верху:
limit nofile 32000 65000
Убедитесь, что эта строка стоит сама по себе - она НЕ помещается в скрипт или предварительный скрипт и т. Д. - это основная строка (или «строфа»).
Теперь просто перезапустите процесс и посмотрите ограничения с помощью cat / proc / 12345 / limits