리눅스 커널 튜닝

시스템이 더 큰 동시성을 지원할 수 있도록 하려면 필수적으로 이벤트 확장 설치를 해야 하며, 리눅스 커널 최적화도 매우 중요합니다. 아래의 최적화 각 항목은 매우 중요하므로 반드시 하나씩 완료해 주십시오.

파라미터 설명:

max-file: 시스템 수준에서 열 수 있는 파일 핸들의 수를 나타냅니다. 이는 전체 OS에 대한 것이며, 사용자를 대상으로 한 것이 아닙니다.

ulimit -n: 프로세스 수준에서 열 수 있는 파일 핸들의 수를 제어합니다. 현재 shell의 현재 사용자와 그 사용자가 시작한 프로세스의 사용 가능한 파일 핸들을 제어합니다.

시스템 수준에서 열 수 있는 파일 핸들의 수를 확인하려면: cat /proc/sys/fs/file-max

파일 /etc/sysctl.conf를 열고 다음 설정을 추가합니다.

# 이 파라미터는 시스템의 TIME_WAIT 수를 설정하며, 기본값을 초과하면 즉시 제거됩니다.
net.ipv4.tcp_max_tw_buckets = 20000
# 시스템의 각 포트가 최대 수신 대기 큐의 길이를 정의하며, 이는 글로벌 파라미터입니다.
net.core.somaxconn = 65535
# 아직 상대방의 확인을 받지 못한 연결 요청을 큐에 보관할 수 있는 최대 수
net.ipv4.tcp_max_syn_backlog = 262144
# 각 네트워크 인터페이스가 데이터를 수신하는 속도가 커널이 이러한 패킷을 처리하는 속도보다 빠를 때, 큐에 허용되는 패킷의 최대 수
net.core.netdev_max_backlog = 30000
# 이 옵션은 NAT 네트워크에 있는 클라이언트가 시간 초과되도록 하며, 0으로 설정하는 것을 권장합니다. 리눅스 4.12 커널부터 `tcp_tw_recycle` 구성을 제거했으므로, "No such file or directory" 오류가 발생하면 무시하십시오.
net.ipv4.tcp_tw_recycle = 0
# 시스템의 모든 프로세스가 열 수 있는 파일의 총 수
fs.file-max = 6815744
# 방화벽 추적 테이블의 크기. 주의: 방화벽이 활성화되지 않은 경우 "net.netfilter.nf_conntrack_max"는 알 수 없는 키라는 오류가 표시됩니다. 무시해도 됩니다.
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000

sysctl -p를 실행하면 즉시 적용됩니다.

설명:

/etc/sysctl.conf에서 설정할 수 있는 옵션이 많으며, 다른 옵션은 자신의 환경에 맞게 설정할 수 있습니다.

열림 파일 수

시스템의 열림 파일 수를 설정하여 높은 동시성에서 too many open files 문제를 해결합니다. 이 옵션은 단일 프로세스가 수용할 수 있는 클라이언트 연결 수에 직접적인 영향을 미칩니다.

Soft open files는 리눅스 시스템 파라미터로, 시스템의 단일 프로세스가 열 수 있는 최대 파일 핸들의 수에 영향을 미칩니다. 이 값은 채팅과 같은 장기 연결 애플리케이션에서 단일 프로세스가 유지할 수 있는 사용자 연결 수에 영향을 미칩니다. ulimit -n을 실행하면 이 파라미터 값을 확인할 수 있습니다. 만약 1024라면, 이는 단일 프로세스가 동시에 최대 1024 또는 그 이하(다른 파일 핸들이 열리고 있기 때문)까지만 유지할 수 있음을 나타냅니다. 4개의 프로세스를 열어 사용자 연결을 유지한다면, 전체 애플리케이션이 동시에 유지할 수 있는 연결 수는 4*1024개를 초과하지 않으며, 즉 최대 4x1024명의 사용자를 지원할 수 있습니다. 이 설정을 늘려 주어야 서비스가 더 많은 TCP 연결을 유지할 수 있습니다.

Soft open files 수정 세 가지 방법:

첫 번째: 터미널에서 직접 ulimit -HSn 102400을 실행한 다음 workerman을 재시작합니다.

이것은 현재 터미널에서만 유효하며, 종료 후에는 open files가 기본값으로 돌아갑니다.

두 번째: /etc/profile 파일의 끝에 ulimit -HSn 102400 한 줄을 추가하여 매번 터미널에 로그인할 때 자동으로 실행되도록 합니다. 변경 후 workerman을 재시작해야 합니다.

세 번째: open files 수치를 영구적으로 유지하려면, 구성 파일인 /etc/security/limits.conf를 수정해야 합니다. 이 파일의 끝에 다음을 추가합니다.

* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000

이 방법은 서버를 재시작해야만 적용됩니다.