Tăng nproc cho các quy trình được khởi chạy bởi systemd trên CentOS 7


26

Tôi đã tăng thành công giá trị nofile và nproc cho người dùng cục bộ, nhưng tôi không thể tìm thấy giải pháp thích hợp cho các quy trình do systemd khởi chạy. Thêm max_open_files vào cấu hình MariaDB không giúp được gì. su - mysql để thay đổi giới hạn theo cách thủ công cũng không hoạt động (Tài khoản này hiện không khả dụng).

/etc/security/limits.conf

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

/etc/security/limits.d/20-nproc.conf (không có tệp nào khác có trong thư mục)

* 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 / giới hạn

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

Điều thú vị là các quy trình khác nhau (người dùng) có số tệp Max mở khác nhau:

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

Câu trả lời:


67

systemd hoàn toàn bỏ qua / etc / security / terms *. Nếu bạn đang sử dụng RPM tự động nén tệp dịch vụ systemd của nó khi cập nhật, bạn sẽ muốn gửi PR để yêu cầu họ đánh dấu các tệp đó là 'noreplace'

Bạn cần cập nhật tệp .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

illill chỉ ra rằng bạn cũng có thể ghi đè các giá trị được cài đặt gói (tìm thấy trong tệp trên) bằng cách thêm chúng vào/etc/systemd/system/<servicename>.d/override.conf

[Service]
LimitNOFILE=49152

Điều này cung cấp phần thưởng bổ sung cho các cài đặt dành riêng cho hệ thống không có nguy cơ bị ghi đè lên bản cập nhật gói.

Sau đó ban hành lệnh: systemctl daemon-reload


Type=notifycần thiết hoặc giải pháp làm việc cho mọi Type?
Karl Richter

@KarlRichter Từ những gì tôi đã lượm lặt được từ các tài liệu hệ thống, các mục Giới hạn * chỉ là một Đối số khác thuộc [Dịch vụ]. Điều đó đang được nói, tôi không quan tâm đến các giá trị Loại khác để có thể nói rằng đó là cách này hay cách khác một cách chắc chắn.
joyiatr72

3
Thay vì sửa đổi tệp đơn vị tại chỗ (có thể bị ghi đè khi nâng cấp gói), bạn chỉ có thể ghi đè các cài đặt cụ thể như đã thấy trong câu trả lời này: stackoverflow.com/a/36423859/264409
ốm vào

@KarlRichter Tôi chưa đọc bất cứ điều gì trong tài liệu systemd chỉ ra rằng loại dịch vụ bị ảnh hưởng bởi các định nghĩa giới hạn.
joyiatr72

3
/etc/systemd/system/<servicename>.service.d/override.conf, systemctl daemon-reloadVà 'systemctl mèo <servicename>' để kiểm tra xem nó nạp một cách chính xác.
Cherif KAOUA

1

Chỉnh sửa /etc/sysctl.conftệp và Thêm dòng sau để tăng số lượng tệp mở tối đa được phép lên 64000.

Đây là một giá trị bắt đầu mặc định tốt nhưng vui lòng nghiên cứu và điều chỉnh giá trị này khi cần thiết cho môi trường của bạn.

fs.file-max=64000

Tôi đã không đề cập đến nó, nhưng nó đã được thiết lập. cat / Proc / sys / fs / file-max: 2097152
amq

1
Sau đó, bạn sẽ cần thêm một dòng chỉ định giá trị LimitNOFILE trong tệp mariadb.service của bạn. Bạn có thể làm điều này bằng cách ghi đè nó trong /etc/systemd/system/mariadb.service hoặc trực tiếp tại /lib/systemd/system/mariadb.service. Nếu dịch vụ của bạn có một tên khác ngoài mariadb, vui lòng thay đổi tên tệp. Google cho LimitNOFILE và bạn sẽ tìm thấy một số tài liệu về điều này.
Pablo

0

Cấu hình tập tin trong /usr/lib/systemd/system/ nên không thể được chỉnh sửa bằng tay và nó là hoàn toàn bình thường (nếu không nói là dự kiến) rằng một rpm sẽ cập nhật các file mà nó quản lý trong thư mục này vào cập nhật.

Như @sickill và @Cherif KAOUA đã chỉ ra trong các nhận xét [ /programming/27849331/how-to-set-nginx-max-open-files/36423859#36423859] bạn nên thêm cấu hình tùy chỉnh bao gồm các giới hạn vào /etc/systemd/system/<servicename>.service.d/override.conf. ví dụ:

[Service]
LimitNOFILE=65536

Sau đó tải lại cấu hình systemctl daemon:

systemctl daemon-reload

RHEL có một phần tuyệt vời về systemd trong Hướng dẫn quản trị hệ thống của họ, trong số những thứ khác, liệt kê các tệp đơn vị systemd nên được đặt và cách ghi đè mặc định .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.