리눅스 커널 최적화
시스템이 더 많은 동시성을 지원할 수 있도록하기 위해서 이벤트 확장을 설치하는 것 외에도 리눅스 커널을 최적화하는 것이 매우 중요합니다. 다음의 각 최적화 항목은 매우 중요하므로 하나씩 완료해야 합니다.
매개변수 설명:
max-file: 시스템 전반에 대한 파일 핸들 수를 나타냅니다. 사용자별이 아니라 전체 운영 체제에 적용됩니다.
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 네트워크에 있는 클라이언트에게 타임아웃을 유발시킵니다. 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" is an unknown key라는 오류가 표시됩니다. 이 경우 무시하면 됩니다
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000
sysctl -p
를 실행하여 즉시 적용합니다.
참고:
/etc/sysctl.conf에는 많은 설정 옵션이 있으며, 다른 환경에 맞게 필요에 따라 설정할 수 있습니다.
파일 열기 수 제한
파일 열기 수를 설정하여 고가용성 환경에서의 too many open files
문제를 해결합니다. 이 옵션은 직접적으로 프로세스가 수용할 수 있는 클라이언트 연결 수에 영향을 미칩니다.
소프트 열기 파일은 리눅스 시스템 매개변수로, 시스템 단일 프로세스가 열 수 있는 최대 파일 핸들 수에 영향을 미치며, 이 값은 장기 연결 응용프로그램에 영향을 미쳐 채팅과 같은 단일 프로세스가 유지할 수 있는 사용자 연결 수에 영향을 미칩니다. ulimit -n
을 실행하여 이 매개변수 값을 볼 수 있으며, 값이 1024이면 단일 프로세스는 최대 1024개의 연결을 유지할 수 있으며 그 외의 파일 핸들이 열려 있기 때문에 실제 수는 더 적을 수 있습니다. 사용자 연결을 유지하는 데 필요한 연결 수를 유지할 수 있도록 앱의 TCP 연결 수를 더 많이 지원하고자 하는 경우 해당 설정을 늘릴 수 있습니다.
소프트 열기 파일을 변경하는 세 가지 방법:
첫 번째 방법: 터미널에서 직접 실행하여 ulimit -HSn 102400
를 실행한 다음 workerman을 다시 시작합니다.
이렇게 하면 현재 터미널에서만 유효하며 종료 후에는 열린 파일이 기본 값으로 다시 설정됩니다.
두 번째 방법: /etc/profile
파일 끝에 ulimit -HSn 102400
와 같이 한 줄을 추가하면 매번 터미널에 로그인할 때마다 자동으로 실행됩니다. 변경 후 workerman을 다시 시작해야 합니다.
세 번째 방법: 영구적으로 파일 열기 수를 변경하려면 반드시 설정 파일을 수정해야 합니다: /etc/security/limits.conf
. 이 파일에 다음을 추가하십시오.
* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000
이 방법은 서버를 다시 시작해야 영향을 받습니다.