성능 테스트의 압력기 병목 분석 및 최적화

8526 단어 성능 테스트
성능 테스트 과정에서 서버에 충분한 압력을 주기 위해 프레스, 즉 아날로그 클라이언트의 기계를 사용해야 한다. 프레스가 잘못 사용하면 테스트 결과가 정확하지 않고 서버의 실제 성능 상황을 반영하지 못한다.따라서 우리는 프레스를 충분히 이해하고 이를 조정하여 프레스 자체의 병목이 압력 측정에 영향을 미치는 것을 피하고 성능 테스트 결과의 정확성과 신뢰성을 위해 선행 조건을 제공해야 한다.다음은 세 단계로 나누어 프레스의 신뢰성을 확보한다. STEP1: 프레스 자체가 병목이 될 수 있는 설정을 이해하고 조정한다.STEP2: 아날로그 프로그램 자체가 병목이 될 수 있는 설정을 이해하고 조정한다.STEP3: 압력계의 단일 프로세스의 성능 병목을 찾아 압력을 가하는 과정에서 이런 방해를 받지 않도록 한다.
STEP1:
  • 네트워크 통신 프로토콜과 관련된 설정 조정(TCP를 예로 들면), 최대 연결 수를 최적화하고 이론적으로 TCP의 최대 연결 수는 65535이기 때문에 이론적으로 단일 기기의 순간 병발 최대는 65535를 초과할 수 없다.프레스를 사용하는 것이 존재하는 이상 반드시 어떤 네트워크 통신 프로토콜을 통해 연결을 구축하고 요청을 보내는 것이다.TCP 프로토콜을 예로 들면, 먼저 TCP 프로토콜에 대해 알아보겠습니다. TCP 연결을 어떻게 식별합니까?최대 연결 수를 정하기 전에 시스템이 tcp 연결을 어떻게 표시하는지 보십시오.시스템은 TCP 연결을 유일하게 표시하는 44개의 모듈을 사용합니다: {local ip,local port,remote ip,remote port}.클라이언트의 최대 tcp 연결 수 (이론적) 클라이언트는 tcp 연결 요청을 할 때마다 연결 포트를 제외하고는 시스템에서 빈 로컬 포트 (local port) 를 선택하게 합니다. 이 포트는 독점적이며 다른 tcp 연결과 공유할 수 없습니다.tcp 포트의 데이터 형식은 unsigned short이기 때문에 로컬 포트의 개수는 최대 65536에 불과하고 포트 0은 특수한 의미를 가지고 사용할 수 없습니다. 이렇게 사용할 수 있는 포트는 최대 65535에 불과하기 때문에 전체가client단인 상황에서 최대 tcp 연결 수는 65535입니다. 이런 연결은 서로 다른 서버 IP에 연결할 수 있습니다.서버의 최대 tcp 연결수(이론상)는 본고와 무관하며 상세한 내용은 다음과 같다.http://www.cnblogs.com/mydomain/archive/2013/05/27/3100835.html위에서 제시한 것은 이론적인 단기 최대 연결수이다. 실제 환경에서 기계 자원, 운영체제 등의 제한을 받아 최대 병발 tcp 연결수는 이론적 상한선에 도달하지 못한다. 또한 1024 이하의 포트는 보통 보존 포트이다.포트 제한 외에도 TCP 접속 메모리 설정이 최대 접속 수에 영향을 미칩니다.기본 2.6 코어 설정에서 테스트를 통해 모든 socket은 15~20k 사이의 메모리를 차지합니다.종합적으로 TCP의 최대 연결 수에 관하여 linux/Unix는 다음과 같은 세 가지 설정을 조정할 수 있다. A: Linux 네트워크 핵이 로컬 포트 번호 범위에 대한 제한: 수정/etc/sysctl.conf 파일, 다음 행과 같이 파일에 추가하거나 수정합니다
    ```
    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
  • 최대 열기 파일 수 조정;http://www.cnblogs.com/peida/archive/2013/02/26/2932972.htmllinux 환경에서 모든 사물은 파일의 형식으로 존재하고 파일을 통해 일반적인 데이터에 접근할 수 있을 뿐만 아니라 네트워크 연결과 하드웨어에도 접근할 수 있다.따라서 전송 제어 프로토콜(TCP)과 사용자 데이터 보고 프로토콜(UDP) 플러그인 등 시스템은 백그라운드에서 이 응용 프로그램에 파일 설명자를 분배했다. 이 파일의 본질에 상관없이 이 파일 설명자는 응용 프로그램과 기초 운영체제 간의 상호작용에 공통된 인터페이스를 제공한다.lsof가 여는 파일은 일반 파일, 디렉터리, 네트워크 파일 시스템의 파일, 문자 또는 장치 파일, (함수) 공유 라이브러리, 파이프, 이름 파이프, 기호 링크, 네트워크 파일(예를 들어 NFS 파일, 네트워크 socket, 유닉스 도메인 이름 socket), 그리고 그 유형의 파일 등등이다. 따라서 프레스로서 각 TCP/UDP 연결은 하나의 파일 열기 수를 차지하는데 여기가 병목이 될 수 있다
  • 프로세스 수 제한을 엽니다. (루트 사용자는 이 항목이 무한합니다.) 프로세스 총 수량에 대한 특별한 요구가 없으면 이 옵션을 수정하지 않아도 됩니다.실행 명령:ulimit-a 보기 결과:maxuserprocesses(-u)16484 이 항목이 병목이 될 수 있으면 수정합니다..
  • 네트워크 카드, 라우팅이 병목이 되지 않는지 확인하십시오
  • 네트워크 대역폭 확인 자세한 내용은 여기를 참조하십시오. 실시간 대역폭 트래픽 보기https://help.aliyun.com/knowledge_detail/5988901.html?pos=11
  • 프레스 기타 조정 가능한 매개 변수: 참고:http://blog.csdn.net/my_yang/article/details/45788717

  • STEP2: 자바의 경우:
  • 자바 더미 메모리, 창고 메모리, 이론 상세:http://blog.csdn.net/qh_java/article/details/9084091중요한 것은:java에서 모든 new의 루트, jvm는 운영체제에 new의 로컬 루트를 요청합니다. 이때 운영체제는 나머지 메모리 공간을 사용하여 루트에 메모리를 분배합니다. jvm의 메모리를 사용하지 않습니다.이렇게 하면 운영체제의 사용 가능한 메모리가 적을수록 jvm가 만들 수 있는 새로운 라인도 줄어든다.다음을 참조하십시오.http://blog.sina.com.cn/s/blog_684fe8af0100wzg5.html따라서 스레드에 사용되는 메모리로 이해할 수 있다.'-Xms-Xmx 설정 메모리 사용'에서 실제 상황에 따라 조절해야 하기 때문에 너무 크면 안 된다. 그렇지 않으면 시작할 수 있는 스레드 수량이 적을수록.만약maven 프로젝트라면 jemeter를 사용하고 마ven의 jemeter 플러그인을 사용하면 POM에서 jmeter 플러그인에서 이 메모리 크기를 설정합니다.또한 어떻게 계산하는지를 첨부하고 메모리만 고려하는 상황에서 기계 이론적으로 열 수 있는 최대 스레드 수:http://blog.csdn.net/feng27156/article/details/19333575홈 인라인 스택 기본값 (64비트 1M)http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.htmlXX: ThreadStackSize 를 검색합니다
  • 마븐 메모리 마븐 자체가 컴파일한 메모리도 너무 작거나 너무 크면 시작할 수 있는 스레드 수에 영향을 줄 수 있다
  • 다른 압력 프로그램의 병목이 있는 프레임워크나 프로그램은 한 대의 기계를 제한하고 본 서비스의 최대 스레드에 연결할 수 있다. 이 설정은 병목이 될 수 있다. 예를 들어dubbo의actives설정(서비스 소비자당 서비스 방법당 최대 병렬 호출수)과 같은 다른 설정이 될 수 있다

  • STEP3: 프레스에서 압력 프로그램 단일 프로세스의 성능 병목 찾기;만약 물리기이고 병발 수가 크지 않다면 이 조항을 무시할 수 있다.상기 알려진 설정이 프레스의 성능에 영향을 미칠 수 있는 병목을 제외하고 프레스의 성능에 영향을 주는 다른 요소를 배제하지 않기 때문에 원격 기계에 mock 프로그램을 구축하면 이 프로그램은 아무것도 하지 않고 바로 성공으로 돌아간다.주의: mock 프로그램은 기계의 물리적 설정을 압력기와 대등하게 배치하는 것이 가장 좋다. (대등할 때 적어도 두 대를 배치한다.) 만약 대등하지 못하면 여러 대를 배치하여 기계를 배치하는 병목을 배제한다.점차적으로 스레드 수를 증가하고 평균 응답 시간과 TPS를 관찰하면 스레드 수가 증가함에 따라 TPS가 상승하기 어렵고 평균 응답 시간이 현저히 증가하는 상황에서 기본적으로 이미 프레스의 병목에 도달했다는 것을 설명할 수 있다. 이때의 스레드 수를 기록할 때 한 대의 프레스의 최대 스레드 수는 이 스레드 수를 초과해서는 안 된다. 그렇지 않으면 압력 측정 결과에서 TPS와 평균 응답 시간이 정확하지 않고 압력 측정 결과가 정확하지 않다.
    요약: STEP3는 매우 중요하다. 실천 과정에서 8핵 64G 메모리의 기계, 단일 프로세스, 최대 스레드 수가 10000을 초과할 때 측정된 서비스(20대의 기계가 실험하는 것)의 압력은 다시 올라가기 어렵기 때문에 STEP1은 병목이 될 수 있는 기계의 배치를 배제한다고 할 수 있다. STEP2는 이미 알고 있는 구덩이를 밟는 것을 피하기 위해 STEP3가 압력계의 단일 프로세스의 압력 능력이 도대체 얼마나 되는지 확인할 수 있다.
    전재:http://blog.csdn.net/kaka1121/article/details/51496387

    좋은 웹페이지 즐겨찾기