Meningkatkan nproc untuk proses yang diluncurkan oleh systemd pada CentOS 7

26

Saya telah berhasil meningkatkan nilai nofile dan nproc untuk pengguna lokal, tetapi saya tidak dapat menemukan solusi yang tepat untuk proses yang diluncurkan oleh systemd. Menambahkan max_open_files ke konfigurasi MariaDB tidak membantu. su - mysql untuk mengubah batas secara manual juga tidak berfungsi (Akun ini saat ini tidak tersedia).

/etc/security/limits.conf

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

/etc/security/limits.d/20-nproc.conf (tidak ada file lain yang ada di direktori)

* 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

Sangat menarik bahwa proses yang berbeda (pengguna) memiliki nomor file Max terbuka yang berbeda:

mysql - 1024 4096
apache - 1024 4096
postfix - 4096 4096
AMQ
sumber

Jawaban:

67

systemd sepenuhnya mengabaikan / etc / security / limit *. Jika Anda menggunakan RPM yang secara otomatis menghapus file layanan systemd-nya saat pembaruan, Anda ingin mengajukan PR untuk meminta mereka menandai file-file itu sebagai 'noreplace'

Anda perlu memperbarui file .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 menunjukkan bahwa Anda juga dapat mengganti nilai paket-instal (ditemukan dalam file di atas) dengan menambahkannya/etc/systemd/system/<servicename>.d/override.conf

[Service]
LimitNOFILE=49152

Ini memberikan bonus tambahan pengaturan khusus sistem yang tidak terancam ditimpa pada pembaruan paket.

Kemudian berikan perintah: systemctl daemon-reload

gladiatr72
sumber
Apakah Type=notifyperlu atau apakah solusinya bekerja untuk setiap orang Type?
Karl Richter
@KarlRichter Dari apa yang telah saya dapatkan dari systemd docs, entri Limit * hanyalah Argumen Lain yang termasuk dalam [Layanan]. Yang sedang berkata, saya belum noodled dengan nilai-nilai tipe lain untuk dapat mengatakan bahwa itu adalah satu atau lain cara dengan pasti.
gladiatr72
3
Alih-alih memodifikasi file unit di tempat (yang mungkin ditimpa pada peningkatan paket) Anda dapat hanya menimpa pengaturan tertentu seperti yang terlihat dalam jawaban ini: stackoverflow.com/a/36423859/264409
sickill
@ KarlRichter Saya belum membaca apa pun di doc sistemd yang menunjukkan bahwa jenis layanan dipengaruhi oleh definisi batas.
gladiatr72
3
/etc/systemd/system/<servicename>.service.d/override.conf, systemctl daemon-reloaddan 'systemctl cat <servicename>' untuk memeriksa apakah sudah dimuat dengan benar.
Cherif KAOUA
1

Edit /etc/sysctl.conffile dan Tambahkan baris berikut untuk meningkatkan jumlah maksimum file terbuka yang diizinkan untuk 64000.

Ini adalah nilai awal default yang baik tetapi silakan meneliti dan mengubah nilai ini sesuai kebutuhan untuk lingkungan Anda.

fs.file-max=64000
Pablo
sumber
Saya belum menyebutkannya, tetapi sudah diatur. cat / proc / sys / fs / file-max: 2097152
amq
1
Maka Anda perlu menambahkan baris yang menentukan nilai LimitNOFILE di file mariadb.service Anda. Anda dapat melakukan ini dengan menimpanya di /etc/systemd/system/mariadb.service atau langsung di /lib/systemd/system/mariadb.service. Jika layanan Anda memiliki nama yang berbeda dengan mariadb, harap ubah nama file. Google untuk LimitNOFILE dan Anda akan menemukan beberapa dokumentasi tentang ini.
Pablo
0

Konfigurasi file di /usr/lib/systemd/system/ seharusnya tidak diedit dengan tangan dan itu adalah hal yang normal (jika tidak diharapkan) bahwa rpm akan memperbarui file yang mengelola dalam direktori ini pada pembaruan.

Seperti @sickill dan @Cherif KAOUA tunjukkan dalam komentar [ /programming/27849331/how-to-set-nginx-max-open-files/36423859#36423859] Anda harus menambahkan konfigurasi khusus termasuk batasan dalam /etc/systemd/system/<servicename>.service.d/override.conf. misalnya:

[Service]
LimitNOFILE=65536

Kemudian muat ulang konfigurasi daemon systemctl:

systemctl daemon-reload

RHEL memiliki bagian hebat pada systemd dalam Panduan Administrator Sistem mereka yang antara lain mencantumkan di mana file unit systemd harus ditempatkan dan cara menimpa default .

PaulJ
sumber