Назад | Перейти на главную страницу

где установлены значения ulimit по умолчанию? (Linux, CentOS)

У меня есть два сервера CentOS 5 с почти одинаковыми характеристиками. Когда я вхожу в систему и делаю ulimit -u, на одной машине я получаю unlimited, а с другой - получаю 77824.

Когда я запускаю cron вроде:

* * * * * ulimit -u > ulimit.txt

Я получаю такие же результаты (unlimited, 77824).

Я пытаюсь определить, где они установлены, чтобы изменить их. Их нет ни в одном из моих профилей (.bashrc, /etc/profile, и т.д.). Это не повлияет ни на cron), ни на /etc/security/limits.conf (который пуст).

Я просмотрел Google и даже зашел так далеко, что сделал grep -Ir 77824 /, но пока ничего не обнаружилось. Я не понимаю, как эти машины могли иметь разные ограничения.

На самом деле мне интересно не для этих машин, а для другой (CentOS 6) машины, у которой есть предел 1024, который слишком мал. Мне нужно запускать задания cron с более высоким пределом, и единственный способ, которым я знаю, как установить это, - это само задание cron. Это нормально, но я бы предпочел установить его в масштабе всей системы, чтобы он не был таким хакерским.

Спасибо за любую помощь. Кажется, это должно быть легко (НЕ).


РЕДАКТИРОВАТЬ - РЕШЕНО

Хорошо, я понял это. Похоже, это проблема либо с CentOS 6, либо с конфигурацией моей машины. В конфигурации CentOS 5 я могу установить /etc/security/limits.conf:

* - nproc unlimited

и это эффективно обновит учетные записи и лимиты cron. Однако в моем компьютере с CentOS 6 это не работает. Вместо этого я должен сделать:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

И все работает, как ожидалось. Может быть, спецификация UID работает, но подстановочный знак (*) определенно НЕ ПРИНИМАЕТСЯ. Как ни странно, подстановочные знаки действительно работают для nofile предел.

Мне все еще хотелось бы знать, откуда на самом деле берутся значения по умолчанию, потому что по умолчанию этот файл пуст, и я не мог понять, почему у меня были разные значения по умолчанию для двух ящиков CentOS, которые имели одинаковое оборудование и были от одного поставщика. .

Эти «стандартные» ограничения применяются:

  • то Ядро Linux в время загрузкиinit обработать),
  • наследство, от пределов родительского процесса (при fork(2) время),
  • PAM при открытии сеанса пользователя (может заменить ядро ​​/ унаследованные значения),
  • то обработать сам (может заменить PAM и значения ядра / унаследованные, см. setrlimit(2)).

Обычные пользовательские процессы не могут выйти за рамки жестких ограничений.

Ядро Linux

Во время загрузки Linux устанавливает ограничения по умолчанию на init процесс, который затем наследуется всеми остальными (дочерними) процессами. Чтобы увидеть эти ограничения: cat /proc/1/limits.

Например, ядро ​​по умолчанию для максимальное количество файловых дескрипторов (ulimit -n) было 1024/1024 (мягкий, жесткий), а был поднят до 1024/4096 в Linux 2.6.39.

По умолчанию максимальное количество процессов ты говоришь о ограничен примерно:

Total RAM in kB / 128

для архитектур x86 (по крайней мере), но дистрибутивы иногда меняют значения ядра по умолчанию, поэтому проверьте исходный код вашего ядра для kernel/fork.c, fork_init(). Предел «количества процессов» там называется RLIMIT_NPROC.

PAM

Обычно для обеспечения аутентификации пользователя при входе в систему PAM используется вместе с некоторыми модулями (см. /etc/pam.d/login).

В Debian модуль PAM, отвечающий за установку ограничений, находится здесь: /lib/security/pam_limits.so.

Эта библиотека будет читать свою конфигурацию из /etc/security/limits.conf и /etc/security/limits.d/*.conf, но даже если эти файлы пусты, pam_limits.so может использовать жестко заданные значения что вы можете проверить в исходном коде.

Например, в Debian библиотека был исправлен так что по умолчанию максимальное количество процессов (nproc) неограничен, а максимальное количество файлов (nofile) составляет 1024/1024:

  case RLIMIT_NOFILE:
      pl->limits[i].limit.rlim_cur = 1024;
      pl->limits[i].limit.rlim_max = 1024;

Так, проверьте исходный код модуля CentOS PAM (ищите RLIMIT_NPROC).

Однако обратите внимание, что многие процессы не проходят через PAM (обычно, если они не запускаются зарегистрированным пользователем, например, демоны и, возможно, задания cron).

На RHEL6 (CentOS6) "максимальное количество пользовательских процессов" по умолчанию установлено на 1024.
Вы можете изменить это значение в файле:

/etc/security/limits.d/90-nproc.conf

Видеть https://bugzilla.redhat.com/show_bug.cgi?id=432903 если вы хотите пожаловаться на это :)

Информация об этом ужасна в Интернете, вот файл limits.conf, который я сделал для debian linux, показывая все возможные параметры и их максимальные "безопасные" ограничения, настройте соответствующим образом.

Это самые высокие значения, которые вы можете установить, некоторые вещи хешируются, их активация приводит к ошибке и невозможности входа в консоль, изменяйте закомментированные параметры на свой страх и риск, но в этом нет необходимости (по умолчанию не ограничено по большинству)

Я надеюсь, что это будет полезно для кого-то, так как я нигде не смог найти эту информацию, есть 4 часа исследования этого файла.

==== FILE START =====
# /etc/security/limits.conf
# 
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#- a user name
#- a group name, with @group syntax
#- the wildcard     *, for default entry
#- the wildcard %, can be also used with %group syntax,
#         for maxlogin limit
#- NOTE: group and wildcard limits are not applied to     root.
#  To apply a limit to the     root user, <domain> must be
#  the literal username     root.
#
#<type> can have the two values:
#- "soft" for enforcing the soft limits
#- "hard" for enforcing hard limits
#
#<item> can be one of the following:
#- core - limits the core file size (KB)
#- data - max data size (KB)
#- fsize - maximum filesize (KB)
#- memlock - max locked-in-memory address space (KB)
#- nofile - max number of open files
#- rss - max resident set size (KB)
#- stack - max stack size (KB)
#- cpu - max CPU time (MIN)
#- nproc - max number of processes
#- as - address space limit (KB)
#- maxlogins - max number of logins for this user
#- maxsyslogins - max number of logins on the system
#- priority - the priority to run user process with
#- locks - max number of file locks the user can hold
#- sigpending - max number of pending signals
#- msgqueue - max memory used by POSIX message queues (bytes)
#- nice - max nice priority allowed to raise to values: [-20, 19]
#- rtprio - max realtime priority
#- chroot - change     root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# -- Defaults:
#(core) core file size                (blocks, -c) 0 (ulimit -Hc or -Sc)
#(data) data seg size                  (bytes, -d) unlimited
#(priority) scheduling priority               (-e) 0
#(fsize) file size                    (blocks, -f) unlimited
#(sigpending) pending signals                 (-i) 378197
#(memlock) max locked memory          (kbytes, -l) 64
# max memory size                     (kbytes, -m) unlimited
#(nofile) open files                          (-n) 65536
# pipe size                        (512 bytes, -p) 8
#(msgqueue) POSIX message queues       (bytes, -q) 819200
#(rtprio) real-time priority                  (-r) 0
#(stack) stack size                   (kbytes, -s) 8192
#(cpu) cpu time                      (seconds, -t) unlimited
#(nproc) max user processes                   (-u) 378197
# virtual memory                      (kbytes, -v) unlimited
#(locks) file locks                           (-x) unlimited

# --     root Limits:
root               -    core            -1
root               -    data            -1
root               -    fsize           -1
root               -    memlock         -1
root               -    nofile          999999
root               -    stack           -1
root               -    cpu             -1
root               -    nproc           -1
root               -    priority        0
root               -    locks           -1
root               -    sigpending      -1
root               -    msgqueue        -1
root               -    rtprio          -1
root               -    maxlogins       -1
root               -    maxsyslogins    -1
#root               -    rss             -1
#root               -    as              -1
#root               -    nice            0
#root               -    chroot          -1

#All Users:
# -- Hard Limits
*               hard    core            -1
*               hard    data            -1
*               hard    fsize           -1
*               hard    memlock         -1
*               hard    nofile          999999
*               hard    stack           -1
*               hard    cpu             -1
*               hard    nproc           -1
*               hard    priority        0
*               hard    locks           -1
*               hard    sigpending      -1
*               hard    msgqueue        -1
*               hard    rtprio          -1
*               hard    maxlogins       -1
*               hard    maxsyslogins    -1
#*               hard    rss             -1
#*               hard    as              -1
#*               hard    nice            0
#*               hard    chroot          -1

# -- Soft Limits
*               soft    core            -1
*               soft    data            -1
*               soft    fsize           -1
*               soft    memlock         -1
*               soft    nofile          999999
*               soft    stack           -1
*               soft    cpu             -1
*               soft    nproc           -1
*               soft    priority        0
*               soft    locks           -1
*               soft    sigpending      -1
*               soft    msgqueue        -1
*               soft    maxlogins       -1
*               soft    maxsyslogins    -1
*               soft    rtprio          -1
#*               soft    rss             -1
#*               soft    as              -1
#*               soft    nice            0
#*               soft    chroot          -1

#randomuser:
# -- Soft Limits
randomuser           soft    core            -1
randomuser           soft    data            -1
randomuser           soft    fsize           -1
randomuser           soft    memlock         -1
randomuser           soft    nofile          999999
randomuser           soft    stack           -1
randomuser           soft    cpu             -1
randomuser           soft    nproc           -1
randomuser           soft    priority        0
randomuser           soft    locks           -1
randomuser           soft    sigpending      -1
randomuser           soft    msgqueue        -1
randomuser           soft    maxlogins       -1
randomuser           soft    maxsyslogins    -1
randomuser           soft    rtprio          -1
#randomuser           soft    rss             -1
#randomuser           soft    as              -1
#randomuser           soft    nice            0
#randomuser           soft    chroot          -1

# End of file

Когда вы проверяли ограничения, использовали ли вы для этого пользователя root?

Из limits.conf страница руководства:

ПРИМЕЧАНИЕ: ограничения на группы и подстановочные знаки не применяются к пользователю root. Чтобы установить ограничение для пользователя root, это поле должно содержать буквальное имя пользователя root.

В этом случае использование явных имен пользователей решит проблему.

ядро / fork.c

max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

В 64-битной версии размер потока 8192

 grep -i total /proc/meminfo 
 MemTotal:        8069352 kB

Теперь я получаю сумму в килобайтах при делении на 4

 echo $((8069352/4))
 2017338

Теперь у меня есть количество страниц

 echo $((8 * 8192 / 4096)
 16

Конечный результат

echo $((2017338/16))
126083

Таким образом, вы получили параметр thread-max, а ограничение пользовательского процесса по умолчанию составляет половину

init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;

ulimit от корня

ulimit -u
62932
echo $((62932*2))
125864 #we are near

Есть еще одна возможность, что конфигурация для "noproc" не работает во время настройки в /etc/security/limits.conf.

Есть еще один файл, который отменяет вашу конфигурацию /etc/security/limits.d/90-nproc.conf.

*          soft    nproc     1024
root       soft    nproc     unlimited

Здесь * config переопределит все, что вы установили в предыдущем файле конфигурации. Итак, в идеале вы настраиваете свои параметры в этом файле.

Похоже, это /etc/security/limits.conf

http://ss64.com/bash/limits.conf.html