WINE@Etersoft/Изменение установленных в системе ограничений

Материал из Русский WINE
Версия от 17:53, 18 марта 2016; Вася Бусалаева (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Изменение установленных в системе ограничений

При использовании ресурсоёмких 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, для этого нужно просто записать новое значение в файл file-max (потребуются права суперпользователя):

  1. echo "104854" > /proc/sys/fs/file-max
  2. cat /proc/sys/fs/file-max

104854

Чтобы настройка лимитов сохранялась между перезагрузками, необходимо внести нужные значения в файл /etc/sysctl.conf (для новых систем- в одном из файлов каталога /etc/sysctl.d):

  1. 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 для вступление настроек в силу.