CentOS 7에서 systemd에 의해 시작된 프로세스에 대한 nproc 증가


26

로컬 사용자의 nofile 및 nproc 값을 성공적으로 늘 렸지만 systemd에서 시작한 프로세스에 대한 적절한 솔루션을 찾을 수 없습니다. MariaDB 구성에 max_open_files를 추가해도 도움이되지 않습니다. 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 / limits

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을 사용하는 경우 해당 파일을 'noreplace'로 표시하도록 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 문서에서 얻은 내용에서 Limit * 항목은 [Service]에 속하는 또 다른 인수입니다. 즉, 확실하게 다른 방법으로 말할 수있는 다른 유형 값으로 국수를 만들지 않았습니다.
gladiatr72

3
패키지 업그레이드시 재정의 될 수있는 장치 파일을 수정하는 대신이 답변에 표시된 특정 설정 만 재정의 할 수 있습니다. stackoverflow.com/a/36423859/264409
sickill

@KarlRichter 나는 서비스 유형이 한계 정의의 영향을 받는다는 것을 나타내는 체계화 된 문서에서 아무것도 읽지 못했습니다.
gladiatr72

3
/etc/systemd/system/<servicename>.service.d/override.conf, systemctl daemon-reload및 'systemctl 고양이 <서비스 이름>'이 제대로 장전 있는지 확인합니다.
Cherif KAOUA

1

/etc/sysctl.conf파일을 편집하고 다음 줄을 추가하여 허용 된 최대 열린 파일 수를 64000으로 늘리십시오.

이것이 좋은 기본 시작 값이지만 환경에 따라이 값을 조사하고 조정하십시오.

fs.file-max=64000

나는 그것을 언급하지 않았지만 이미 설정되어 있습니다. cat / proc / sys / fs / file-max : 2097152
amq

1
그런 다음 mariadb.service 파일에서 LimitNOFILE 값을 지정하는 행을 추가해야합니다. /etc/systemd/system/mariadb.service 또는 /lib/systemd/system/mariadb.service에서 직접 재정 의하여이를 수행 할 수 있습니다. 서비스가 mariadb가 아닌 다른 이름을 가진 경우 파일 이름을 변경하십시오. LimitNOFILE 용 Google을 사용하면 이에 대한 문서를 찾을 수 있습니다.
Pablo

0

구성 파일은 직접 편집 /usr/lib/systemd/system/ 해서는 안되며 rpm이 업데이트시이 디렉토리에서 관리하는 파일을 업데이트하는 것이 정상입니다 (예상하지 않을 경우).

@sickill과 @Cherif KAOUA가 주석에서 지적했듯이 [ https://stackoverflow.com/questions/27849331/how-to-set-nginx-max-open-files/36423859#36423859] 제한을 포함하여 사용자 정의 구성을 추가해야합니다 /etc/systemd/system/<servicename>.service.d/override.conf. 예 :

[Service]
LimitNOFILE=65536

그런 다음 systemctl 디먼 구성을 다시로드하십시오.

systemctl daemon-reload

RHEL의 시스템 관리자 안내서에는 systemd에 대한 훌륭한 섹션이 있으며 여기에는 시스템 단위 파일이 있어야하는 위치기본값재정의 하는 방법이 나열 되어 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.