WINE@Etersoft/Изменение установленных в системе ограничений — различия между версиями
(→Для Ubuntu 8.10 и новее) |
(→Лимит на количество открытых файлов) |
||
(не показано 5 промежуточных версии 4 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория:WINE@Etersoft]] | [[Категория:WINE@Etersoft]] | ||
− | + | = Изменение установленных в системе ограничений = | |
При использовании ресурсоёмких win-приложений могут возникать проблемы, связанные с установленными в системе ограничениями. | При использовании ресурсоёмких win-приложений могут возникать проблемы, связанные с установленными в системе ограничениями. | ||
Строка 14: | Строка 14: | ||
Как правило, в современных системах лимит ядра достаточно велик (около сотни тысяч файлов), а вот для каждого процесса установлено ограничение в 1024 файловых дескриптора. Обычно его и требуется увеличить, как правило, достаточно значения 5000. | Как правило, в современных системах лимит ядра достаточно велик (около сотни тысяч файлов), а вот для каждого процесса установлено ограничение в 1024 файловых дескриптора. Обычно его и требуется увеличить, как правило, достаточно значения 5000. | ||
− | Лимит по количеству открытых файлов для командной оболочки пользователя можно устанавливать при помощи подсистемы авторизации PAM. Для этого в конфигурационном файле <code>/etc/security/limits.conf</code> выставляются необходимые значения:< | + | Лимит по количеству открытых файлов для командной оболочки пользователя можно устанавливать при помощи подсистемы авторизации PAM. Для этого в конфигурационном файле <code>/etc/security/limits.conf</code> выставляются необходимые значения:<pre> |
* soft nofile 5000 | * soft nofile 5000 | ||
* hard nofile 5000 | * hard nofile 5000 | ||
− | </ | + | </pre> |
Чтобы лимит применялся при регистрации пользователей в системе, в файле <code>/etc/pam.d/system-auth</code> должна быть строка:<code> | Чтобы лимит применялся при регистрации пользователей в системе, в файле <code>/etc/pam.d/system-auth</code> должна быть строка:<code> | ||
Строка 23: | Строка 23: | ||
</code>Обычно она уже имеется в системе. | </code>Обычно она уже имеется в системе. | ||
− | Чтобы лимит применялся при входе через ssh в системе, в файле <code>/etc/pam.d/sshd</code> должна быть строка:<code> | + | Чтобы лимит применялся при входе через ssh в системе, в файле <code>/etc/pam.d/sshd</code> должна быть строка: |
+ | <code> | ||
session required pam_limits.so | session required pam_limits.so | ||
</code> | </code> | ||
− | В Debian Lenny есть бага <code>http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=515673</code>, из-за которой установленный лимит не применяется при входе пользователя. В этом случае нужно вписать команду ulimit-n 5000 в файл <code>/etc/init.d/rc</code>, выполняющийся при старте системы. | + | В Debian Lenny есть бага <code>http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=515673</code>, из-за которой установленный лимит не применяется при входе пользователя. В этом случае нужно вписать команду <code>ulimit -n 5000</code> в файл <code>/etc/init.d/rc</code>, выполняющийся при старте системы. |
После повторного входа в систему выставленное вами значение лимита должно быть отображено в выводе команды <code>ulimit -n</code>. Также значения лимита можно узнать из вывода команды <code>winediag</code>. | После повторного входа в систему выставленное вами значение лимита должно быть отображено в выводе команды <code>ulimit -n</code>. Также значения лимита можно узнать из вывода команды <code>winediag</code>. | ||
Строка 33: | Строка 34: | ||
Узнать текущее значение лимита ядра можно через команду <code>winediag</code>. | Узнать текущее значение лимита ядра можно через команду <code>winediag</code>. | ||
− | Разово изменить это значение в Linux можно посредством той же <code>proc</code>, для этого нужно просто записать новое значение в файл file-max (потребуются права суперпользователя): | + | Разово изменить это значение в Linux можно посредством той же <code>proc</code>, для этого нужно просто записать новое значение в файл <code>/proc/sys/fs/file-max</code> (потребуются права суперпользователя): |
− | < | + | <pre> |
# echo "104854" > /proc/sys/fs/file-max | # echo "104854" > /proc/sys/fs/file-max | ||
# cat /proc/sys/fs/file-max | # cat /proc/sys/fs/file-max | ||
104854 | 104854 | ||
− | </ | + | </pre> |
− | Чтобы настройка лимитов сохранялась между перезагрузками, | + | Чтобы настройка лимитов сохранялась между перезагрузками, потребуется внести нужные значения в файл <code>/etc/sysctl.conf</code> (для некоторых систем — в одном из файлов каталога <code>/etc/sysctl.d</code>): |
− | < | + | <pre> |
# Maximum number of open files permitted | # Maximum number of open files permitted | ||
fs.file-max = 104854 | fs.file-max = 104854 | ||
− | </ | + | </pre> |
=== Для Ubuntu 8.04 и некоторых других систем === | === Для Ubuntu 8.04 и некоторых других систем === | ||
Строка 74: | Строка 75: | ||
Для изменения системных установок правим содержимое файла <code>/etc/sysctl.d/10-process-security.conf</code>, заменив <code>vm.mmap_min_addr = 65536</code> на <code>vm.mmap_min_addr = 0</code> и выполнив <code>sysctl -p</code> для вступление настроек в силу. | Для изменения системных установок правим содержимое файла <code>/etc/sysctl.d/10-process-security.conf</code>, заменив <code>vm.mmap_min_addr = 65536</code> на <code>vm.mmap_min_addr = 0</code> и выполнив <code>sysctl -p</code> для вступление настроек в силу. | ||
− | |||
<noinclude>{{Wine}}</noinclude> | <noinclude>{{Wine}}</noinclude> |
Текущая версия на 11:07, 1 декабря 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
, для этого нужно просто записать новое значение в файл /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
для вступление настроек в силу.