WINE@Etersoft/Изменение установленных в системе ограничений
Содержание
Изменение установленных в системе ограничений
При использовании ресурсоёмких win-приложений могут возникать проблемы, связанные с установленными в системе ограничениями.
Лимит на количество открытых файлов
Ещё одна сторона совместной работы: одновременное использование большего количества ресурсов, что может приводить к превышению стандартных лимитов, используемых по умолчанию в различных Unix-системах. Лимиты могут определяться как в момент компиляции ядра, так и настраиваться в любой момент в процессе работы.
В контексте использования WINE наиболее актуален лимит на открытые файловые дескрипторы. Если в приложении не открываются большие файловые базы или невозможно работать более чем 3-м пользователям одновременно, это может означать, что превышен лимит на открытые файлы.
Лимит на открытые файлы двухуровневый: с одной стороны, имеется лимит ядра на общее число всех открытых файлов, с другой стороны, для каждого процесса также может быть выставлен лимит на число открытых файлов.
Как правило, в современных системах лимит ядра достаточно велик (около сотни тысяч файлов), а вот для каждого процесса установлено ограничение в 1024 файловых дескриптора. Обычно его и требуется увеличить, как правило, достаточно значения 5000.
Лимит по количеству открытых файлов для командной оболочки пользователя можно устанавливать при помощи подсистемы авторизации PAM. Для этого в конфигурационном файле/etc/security/limits.conf
выставляются необходимые значения:* soft nofile 5000 * hard nofile 5000
Чтобы лимит применялся при регистрации пользователей в системе, в файле /etc/pam.d/system-auth
должна быть строка:
session required /lib/security/pam_limits.so
Обычно она уже имеется в системе.
Чтобы лимит применялся при входе через ssh в системе, в файле /etc/pam.d/sshd
должна быть строка:
session required pam_limits.so
В Debian Lenny есть бага http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=515673
, из-за которой установленный лимит не применяется при входе пользователя. В этом случае нужно вписать команду ulimit -n 5000
в файл /etc/init.d/rc
, выполняющийся при старте системы.
После повторного входа в систему выставленное вами значение лимита должно быть отображено в выводе команды ulimit -n
. Также значения лимита можно узнать из вывода команды winediag
.
Узнать текущее значение лимита ядра можно через команду winediag
.
Разово изменить это значение в Linux можно посредством той же proc
, для этого нужно просто записать новое значение в файл /proc/sys/fs/file-max
(потребуются права суперпользователя):
# echo "104854" > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 104854
Чтобы настройка лимитов сохранялась между перезагрузками, потребуется внести нужные значения в файл /etc/sysctl.conf
(для некоторых систем — в одном из файлов каталога /etc/sysctl.d
):
# Maximum number of open files permitted fs.file-max = 104854
Для Ubuntu 8.04 и некоторых других систем
Если в момент запуска приложения в WINE получаем ошибку:
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
или просто предупреждение
preloader: Warning: failed to reserve range 00000000-00010000
Нужно убрать нижнюю границу маппинга адресов, однократно- командой sysctl -w vm.mmap_min_addr=0
.
Для изменения системных установок правим содержимое файла /etc/sysctl.conf
, заменив vm.mmap_min_addr = 65536
на vm.mmap_min_addr = 0
и выполнив sysctl -p
для вступление настроек в силу.
Для Ubuntu 8.10 и новее
Если в момент запуска приложения в WINE получаем предупреждение
preloader: Warning: failed to reserve range 00000000-00010000
Нужно убрать нижнюю границу маппинга адресов, однократно- командой sysctl -w vm.mmap_min_addr=0
.
Для изменения системных установок правим содержимое файла /etc/sysctl.d/10-process-security.conf
, заменив vm.mmap_min_addr = 65536
на vm.mmap_min_addr = 0
и выполнив sysctl -p
для вступление настроек в силу.