성능 테스트의 압력기 병목 분석 및 최적화
8526 단어 성능 테스트
STEP1:
```
net.ipv4.ip_local_port_range = 1024 65000
```
1024~65000 。 , 1024; 65535。 。
수정이 완료되면sysctl을 실행합니다sysctl -p
시스템에 오류 메시지가 없으면 새 로컬 포트 범위 설정이 성공했음을 나타냅니다.상기 포트 범위에 따라 설정하면 이론적으로 하나의 프로세스로 최대 60000여 개의 B:Linux 네트워크 코어를 동시에 구축할 수 있는 IP_TABLE 방화벽은 최대 추적된 TCP 연결 수에 대한 제한이 있으므로 방화벽이 없으면 무시할 수 있습니다. (참조:http://blog.chinaunix.net/uid-24907956-id-3428052.html) 우선 방화벽이 있는지 확인한다service iptables status
만약 조건이 허락된다면 직접적으로 할 수 있다service iptables stop iptables
방화벽 상태 다시 보기:service iptables status
실행 결과:iptables: Firewall is not running.
방화벽을 닫을 수 없는 경우 IP_ 수정TABLE 방화벽의 최대 추적 TCP 연결 수: 수정/etc/sysctl.conf 파일, 파일에 추가하거나 수정합니다net.ipv4.ip_conntrack_max = 40960
수정이 완료되면sysctl을 실행합니다sysctl -p
시스템에 오류 메시지가 없으면 새 최대 추적 TCP 연결 수 제한을 수정했습니다.상기 매개 변수에 따라 설정하면 이론적으로 하나의 프로세스가 최대 40960개의 TCP 클라이언트 연결을 동시에 설정할 수 있다.C:TCP 관련 메모리는 기본 2.6 코어 설정으로 제한되어 있으며, 시험을 통해 모든 socket은 15~20k 사이의 메모리를 차지합니다.프로필 수정:/etc/sysctl.conf net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
**net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_max_syn_backlog = 262144**
net.core.netdev_max_backlog = 20000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_orphans = 131072
프로필 효력 발생:sudo/sbin/sysctl-p는 주로 이 몇 가지를 보고 기계 메모리 크기에 따라 조절합니다:net.ipv4.tcp_rmem은 읽기 버퍼의 크기, 세 가지 값을 설정합니다. 첫 번째는 이 읽기 버퍼의 최소값이고, 세 번째는 최대값이며, 중간은 기본값입니다.우리는 프로그램에서 읽기 버퍼의 크기를 수정할 수 있지만, 최소와 최대를 초과해서는 안 된다.모든 socket이 사용하는 메모리 수를 최소화하기 위해서 기본값은 4096입니다.net.ipv4.tcp_wmem은 쓰기 버퍼의 크기를 설정하는 데 사용됩니다.읽기 버퍼와 쓰기 버퍼는 크기에 따라 socket의 메모리 사용에 직접적인 영향을 줍니다.net.ipv4.tcp_mem는 바이트가 아닌 tcp의 메모리 크기를 설정합니다.두 번째 값을 초과하면 TCP가pressure 모드에 들어갑니다. 이때 TCP는 메모리의 사용을 안정시키고 첫 번째 값보다 작으면pressure 모드를 종료합니다.메모리가 세 번째 값을 초과하면 TCP는 socket 분배를 거부합니다. dmesg를 보면 많은 로그'TCP: too many of orphaned sockets'를 보냅니다.net.ipv4.tcp_max_이 값도 설정해야 합니다. 이 값은 시스템이 어떤 프로세스에 속하지 않는 socket 수량을 처리할 수 있음을 나타냅니다. 우리가 대량의 연결을 신속하게 구축해야 할 때 이 값을 주목해야 합니다.프로세스에 속하지 않는 socket의 수량이 이 값보다 크면 dmesg는 "too many of orphaned sockets"를 볼 수 있습니다.또한 LINUX를 첨부하여 tcp 연결 수와 상태, 그리고 상태를 확인하십시오. 참고:http://blog.sina.com.cn/s/blog_623630d50101r93l.html STEP2: 자바의 경우:
STEP3: 프레스에서 압력 프로그램 단일 프로세스의 성능 병목 찾기;만약 물리기이고 병발 수가 크지 않다면 이 조항을 무시할 수 있다.상기 알려진 설정이 프레스의 성능에 영향을 미칠 수 있는 병목을 제외하고 프레스의 성능에 영향을 주는 다른 요소를 배제하지 않기 때문에 원격 기계에 mock 프로그램을 구축하면 이 프로그램은 아무것도 하지 않고 바로 성공으로 돌아간다.주의: mock 프로그램은 기계의 물리적 설정을 압력기와 대등하게 배치하는 것이 가장 좋다. (대등할 때 적어도 두 대를 배치한다.) 만약 대등하지 못하면 여러 대를 배치하여 기계를 배치하는 병목을 배제한다.점차적으로 스레드 수를 증가하고 평균 응답 시간과 TPS를 관찰하면 스레드 수가 증가함에 따라 TPS가 상승하기 어렵고 평균 응답 시간이 현저히 증가하는 상황에서 기본적으로 이미 프레스의 병목에 도달했다는 것을 설명할 수 있다. 이때의 스레드 수를 기록할 때 한 대의 프레스의 최대 스레드 수는 이 스레드 수를 초과해서는 안 된다. 그렇지 않으면 압력 측정 결과에서 TPS와 평균 응답 시간이 정확하지 않고 압력 측정 결과가 정확하지 않다.
요약: STEP3는 매우 중요하다. 실천 과정에서 8핵 64G 메모리의 기계, 단일 프로세스, 최대 스레드 수가 10000을 초과할 때 측정된 서비스(20대의 기계가 실험하는 것)의 압력은 다시 올라가기 어렵기 때문에 STEP1은 병목이 될 수 있는 기계의 배치를 배제한다고 할 수 있다. STEP2는 이미 알고 있는 구덩이를 밟는 것을 피하기 위해 STEP3가 압력계의 단일 프로세스의 압력 능력이 도대체 얼마나 되는지 확인할 수 있다.
전재:http://blog.csdn.net/kaka1121/article/details/51496387
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHP에서 json_encode、json_decode와serialize,unserialize의 성능 테스트 분석그래서 PHP의 대상이 어떻게 서열화되어 저장성 가격이 가장 높을까요?이어서 동료가 추천한 JSON 인코딩과 디코딩 함수가 생각났다.그에 따르면 json_encode 및 json_decode는 내장된 serializ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.