Zwiększenie nproc dla procesów uruchomionych przez systemd na CentOS 7

26

Z powodzeniem zwiększyłem wartość nofile i nproc dla lokalnych użytkowników, ale nie mogłem znaleźć odpowiedniego rozwiązania dla procesów uruchomionych przez systemd. Dodanie max_open_files do konfiguracji MariaDB nie pomaga. su - mysql, aby ręcznie zmienić limit, też nie działa (to konto jest obecnie niedostępne).

/etc/security/limits.conf

* soft nofile 102400
* hard nofile 102400
* soft nproc 10240
* hard nproc 10240

/etc/security/limits.d/20-nproc.conf (w katalogu nie ma innych plików)

* soft nofile 102400
* hard nofile 102400
* soft nproc 10240
* hard nproc 10240

/etc/sysctl.conf

fs.file-max = 2097152

/etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

/etc/pam.d/systemd-user

#%PAM-1.0

# Used by systemd when launching systemd user instances.

account include system-auth
session include system-auth
auth required pam_deny.so
password required pam_deny.so

/var/log/mariadb/mariadb.log

[Warning] Changed limits: max_open_files: 1024  max_connections: 32  table_cache: 491

/ proc / mysql_pid / limit

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             30216                30216                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       30216                30216                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

Interesujące jest to, że różne procesy (użytkownicy) mają różną maksymalną liczbę otwartych plików:

mysql - 1024 4096
apache - 1024 4096
postfix - 4096 4096
il
źródło

Odpowiedzi:

67

systemd całkowicie ignoruje / etc / security / limit *. Jeśli używasz RPM, który automatycznie zgniata plik systemowej usługi podczas aktualizacji, zechcesz złożyć PR, aby poprosić go o oznaczenie tych plików jako „noreplace”

Musisz zaktualizować plik .service /usr/lib/systemd/system/<servicename>.service

[Unit]
Description=Some Daemon
After=syslog.target network.target

[Service]
Type=notify
LimitNOFILE=49152
ExecStart=/usr/sbin/somedaemon

[Install]
WantedBy=multi-user.target

sickill wskazał, że można również przesłonić wartości zainstalowane w pakiecie (znajdujące się w powyższym pliku), dodając je do/etc/systemd/system/<servicename>.d/override.conf

[Service]
LimitNOFILE=49152

Zapewnia to dodatkową premię do ustawień specyficznych dla systemu, które nie są zagrożone nadpisaniem podczas aktualizacji pakietu.

Następnie wydaj polecenie: systemctl daemon-reload

gladiatr72
źródło
Czy jest to Type=notifykonieczne, czy rozwiązanie działa dla każdego Type?
Karl Richter
@KarlRichter Z tego, co zebrałem z systemowych dokumentów, wpisy Limit * są po prostu kolejnym argumentem należącym do [Service]. To powiedziawszy, nie nakarmiłem się innymi wartościami typu, aby móc powiedzieć, że jest tak czy inaczej z całą pewnością.
gladiatr72,
3
Zamiast modyfikować plik jednostki na miejscu (który może zostać zastąpiony przy aktualizacji pakietu), możesz zastąpić tylko określone ustawienia, jak widać w tej odpowiedzi: stackoverflow.com/a/36423859/264409
illill
@KarlRichter Nie przeczytałem niczego w dokumentach systemowych wskazujących, że na typ usługi mają wpływ definicje limitów.
gladiatr72,
3
/etc/systemd/system/<servicename>.service.d/override.conf, systemctl daemon-reloadI „systemctl kot <nazwa_usługi>”, aby sprawdzić, czy to prawidłowo załadowany.
Cherif KAOUA,
1

Edytuj /etc/sysctl.confplik i dodaj następujący wiersz, aby zwiększyć maksymalną dozwoloną liczbę otwartych plików do 64000.

Jest to dobra domyślna wartość początkowa, ale proszę zbadać i dostosować tę wartość w zależności od potrzeb środowiska.

fs.file-max=64000
Pablo
źródło
Nie wspomniałem o tym, ale jest już ustawiony. Cat / Proc / WSP / F / pliku-max: 2097152
AMQ
1
Następnie musisz dodać wiersz określający wartość LimitNOFILE w pliku mariadb.service. Możesz to zrobić, zastępując go w /etc/systemd/system/mariadb.service lub bezpośrednio w /lib/systemd/system/mariadb.service. Jeśli Twoja usługa ma inną nazwę niż mariadb, zmień nazwę pliku. Google for LimitNOFILE, a znajdziesz na to trochę dokumentacji.
Pablo
0

Pliki konfiguracyjne nie/usr/lib/systemd/system/ powinny być edytowane ręcznie i jest całkowicie normalne (jeśli nie jest to oczekiwane), że rpm zaktualizuje pliki, którymi zarządza w tym katalogu podczas aktualizacji.

Jak zauważyli @sickill i @Cherif KAOUA w komentarzach [ /programming/27849331/how-to-set-nginx-max-open-files/36423859#36423859] , należy dodać niestandardową konfigurację z limitami do /etc/systemd/system/<servicename>.service.d/override.conf. na przykład:

[Service]
LimitNOFILE=65536

Następnie ponownie załaduj konfigurację demona systemctl:

systemctl daemon-reload

RHEL ma świetną sekcję na temat systemd w swoim Przewodniku administratora systemu, która zawiera między innymi listę miejsc, w których powinny być umieszczone pliki jednostki systemowej oraz informacje o tym, jak zastąpić wartości domyślne .

PaulJ
źródło