การเพิ่ม nproc สำหรับกระบวนการที่เปิดตัวโดย systemd บน CentOS 7


26

ฉันเพิ่มค่า nofile และ nproc ให้กับผู้ใช้ในพื้นที่ได้สำเร็จ แต่ฉันไม่สามารถหาโซลูชันที่เหมาะสมสำหรับกระบวนการที่เปิดตัวโดย systemd การเพิ่ม max_open_files ให้กับการกำหนดค่า MariaDB ไม่ได้ช่วยอะไร su - mysqlเพื่อเปลี่ยนขีด จำกัด ด้วยตนเองไม่ทำงาน (บัญชีนี้ไม่สามารถใช้งานได้ในขณะนี้)

/etc/security/limits.conf

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

/etc/security/limits.d/20-nproc.conf (ไม่มีไฟล์อื่นอยู่ในไดเรกทอรี)

* 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                     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

เป็นที่น่าสนใจว่ากระบวนการต่าง ๆ (ผู้ใช้) มีจำนวนไฟล์เปิดสูงสุดแตกต่างกัน:

mysql - 1024 4096
apache - 1024 4096
postfix - 4096 4096

คำตอบ:


67

systemdละเว้น / etc / security / limits * อย่างสมบูรณ์ หากคุณกำลังใช้ RPM ซึ่งจะทำการบีบอัดไฟล์บริการ systemd อัตโนมัติเมื่อมีการอัพเดทคุณจะต้องยื่น PR เพื่อขอให้พวกเขาทำเครื่องหมายไฟล์เหล่านั้นว่า 'ไม่มีการเปลี่ยนแปลง'

คุณต้องอัปเดตไฟล์. 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ชี้ให้เห็นว่าคุณยังสามารถแทนที่ค่าที่ติดตั้งแพคเกจ (พบได้ในไฟล์ด้านบน) โดยเพิ่มลงไป/etc/systemd/system/<servicename>.d/override.conf

[Service]
LimitNOFILE=49152

สิ่งนี้ให้โบนัสเพิ่มเติมของการตั้งค่าเฉพาะระบบที่ไม่ได้อยู่ในอันตรายที่จะถูกเขียนทับในการอัพเดทแพ็คเกจ

จากนั้นออกคำสั่ง: systemctl daemon-reload


คือType=notifyความจำเป็นหรือไม่ทำงานแก้ปัญหาสำหรับทุกคนType?
Karl Richter

@KarlRichter จากสิ่งที่ฉันได้รวบรวมจาก systemd docs รายการ Limit * เป็นเพียงอาร์กิวเมนต์อื่นที่อยู่ภายใต้ [บริการ] ที่ถูกกล่าวว่าฉันไม่ได้ noodled กับค่าประเภทอื่น ๆ ที่จะสามารถพูดได้ว่ามันเป็นวิธีหนึ่งหรืออื่น ๆ ด้วยความมั่นใจ
gladiatr72

3
แทนการแก้ไขไฟล์หน่วยในสถานที่ (ซึ่งอาจจะเกินในการอัพเกรดแพ็คเกจ) คุณสามารถแทนที่การตั้งค่าเฉพาะที่เห็นในคำตอบนี้: stackoverflow.com/a/36423859/264409
sickill

@KarlRichter ฉันยังไม่ได้อ่านอะไรใน systemd docs ที่ระบุว่าประเภทบริการได้รับผลกระทบจากข้อกำหนดที่ จำกัด
gladiatr72

3
/etc/systemd/system/<servicename>.service.d/override.conf, systemctl daemon-reloadและ 'แมว systemctl <servicename>' เพื่อตรวจสอบว่ามันถูกต้อง
Cherif KAOUA

1

แก้ไข/etc/sysctl.confไฟล์และเพิ่มบรรทัดต่อไปนี้เพื่อเพิ่มจำนวนไฟล์ที่เปิดสูงสุดที่อนุญาตให้ 64000

นี่เป็นค่าเริ่มต้นที่ดี แต่โปรดทำการวิจัยและปรับแต่งค่านี้ตามต้องการสำหรับสภาพแวดล้อมของคุณ

fs.file-max=64000

ฉันไม่ได้พูดถึงมัน แต่มันถูกตั้งค่าแล้ว แมว proc / sys / / FS / ไฟล์สูงสุด: 2097152
AMQ

1
จากนั้นคุณจะต้องเพิ่มบรรทัดที่ระบุค่า LimitNOFILE ในไฟล์ mariadb.service ของคุณ คุณสามารถทำได้โดยการแทนที่มันใน /etc/systemd/system/mariadb.service หรือโดยตรงที่ /lib/systemd/system/mariadb.service หากบริการของคุณมีชื่ออื่นนอกเหนือจากมาเรียบโปรดเปลี่ยนชื่อไฟล์ Google สำหรับ LimitNOFILE และคุณจะพบเอกสารเกี่ยวกับเรื่องนี้
Pablo

0

ไม่/usr/lib/systemd/system/ ควรแก้ไขไฟล์การกำหนดค่าด้วยมือและเป็นเรื่องปกติอย่างสมบูรณ์ (หากไม่คาดหมาย) ว่ารอบต่อนาทีจะอัปเดตไฟล์ที่จัดการในไดเรกทอรีนี้เมื่ออัปเดต

ในฐานะ @sickill และ @Cherif KAOUA ชี้ให้เห็นในความคิดเห็น [ /programming/27849331/how-to-set-nginx-max-open-files/36423859#36423859]คุณควรเพิ่มการกำหนดค่าแบบกำหนดเองรวมถึงข้อ จำกัด/etc/systemd/system/<servicename>.service.d/override.conf. เช่น:

[Service]
LimitNOFILE=65536

จากนั้นรีโหลดการกำหนดค่า systemctl daemon:

systemctl daemon-reload

RHEL มีส่วนดีใน systemd ในคู่มือผู้ดูแลระบบของพวกเขาซึ่งในสิ่งอื่น ๆ รายการที่ไฟล์หน่วย systemd ควรจะอยู่และวิธีการแทนที่ค่าเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.