소개: 대부분의 서비스는 Linux에서 실행됩니다. 이제 Linux가 널리 사용되지만 여전히 성능 모니터링 지표에 대해 논의해 보겠습니다. 성능 모니터링은 I/O, 메모리, CPU, TCP에서 시작됩니다. 연결 번호, 네트워크, 프로세스 또는 스레드. 사용되는 명령은 iostat, vmstat, sar, mpstat, netstat, ss, iftop, free, pstree/ps, pidstat, top, (uptime) 더 자세히 살펴보겠습니다. 1. 디스크 I/O(iostat)
우리 머신에는 디스크에 저장된 많은 데이터가 있습니다. 우리는 디스크와 상호 작용해야 하는 많은 데이터를 읽습니다. 저속 장치이며 종종 차단되므로 디스크 I/O 모니터링이 매우 중요합니다. 우리는 iostat를 사용하여 디스크 상태를 진단합니다. 사용된 머신은 Tencent Cloud 호스트입니다.
ps: 초당 I/O 요청 수를 나타내는 장치의 초당 전송 수
Blk_read/s: 장치에서 읽기 per second 수신된 데이터 량
Blk_wrtn/s: 초당 장치에 쓴 데이터 량
Blk_read: 읽은 전체 데이터 량
Blk_wrtn : 작성된 데이터의 총량
%user : 사용자 모드 프로세스에서 사용하는 CPU 부하
%nice : 우선 순위 프로세스에서 사용하는 CPU 부하
% system: 커널 상태 프로세스에서 사용하는 CPU 로드를 나타냅니다.
%iowait: CPU가 I/O를 기다리고 있을 때의 CPU 로드를 나타냅니다.
%steal: 도난당한 CPU 로드를 나타냅니다. 가상화에 사용됨
%idle은 기술에 사용됨: 유휴 CPU 로드를 나타냄
iostat에는 확장 정보를 나타내는 일반적으로 사용되는 매개 변수 옵션 -x도 있습니다.
rrqm/s: 이 장치와 관련된 읽기 요청 수(다중 I/O 병합 작업)가 초당 병합됩니다.
wrqm/s: 관련 쓰기 요청 수
r/s: 초당 장치에 전송된 읽기 요청 수
w/s: 초당 장치에 전송된 쓰기 수 요청
rsec/s: 초당 읽은 장치 섹터 수
wsec/s: 초당 쓴 장치 섹터 수
avgrq -sz: 평균 요청 섹터 크기
avgqu-sz: 평균 요청 큐 길이
await: 각 I/O 요청의 평균 처리 시간(대기 시간)
r_await: 평균 처리 각 읽기 I/O 요청 시간
w_await: 각 쓰기 I/O 요청의 평균 처리 시간
svctm: 시간/O 작업 서비스 시간당 평균 I/O 요청을 나타냅니다. svctm 값과 wait 값이 매우 가까우면 I/O 대기가 거의 없다는 의미입니다. wait 값이 svctm 값보다 훨씬 높다면 I/O 대기열 대기가 너무 크다는 의미입니다. long
%util: 통계에서 I/O 작업을 처리하는 데 소요된 총 시간, 즉 CPU 소비 비율입니다. 예를 들어 통계 시간 간격이 1초이면 장치는 0.65초 동안 I/O를 처리하고 0.35초 동안 유휴 상태입니다. 그러면 이 장치의 %util=0.65/1=65%가 일반적으로 이 매개변수가 100%이면 장치가 전체 용량에 가깝게 실행되고 있음을 의미합니다(물론 %util이 여러 개 있는 경우에도 마찬가지입니다). 100%, 디스크의 동시성 성능으로 인해 디스크 사용량이 반드시 병목 현상에 도달하지는 않을 수 있음)
2. 메모리(무료)
에서 Linux 시스템에서는 메모리 사용량을 확인합니다. free 명령을 사용하여
의 첫 번째 줄에 있는 정보를 봅니다(운영 체제 수준에서 생각할 수 있음)
total : 총 물리적 메모리 크기
used: 할당된 크기
free: 할당되지 않은 크기
shared: 공유된 크기 메모리, 주로 IPC 통신에 사용
buffer: 블록 장치 버퍼링에 사용
cached: 파일 내용 버퍼링, 즉 캐싱에 사용
"Cache"는 분할하는 것 프로세스와 하드 디스크 버퍼 사이에 있는 메모리 영역으로, 프로세스는 데이터를 읽어야 할 때 "비포장도로" 하드 대신 "고속도로" 캐시에서 직접 데이터를 읽습니다.
여기의 버퍼는 실제로 데이터의 메타데이터(디렉터리 이름, 파일 크기, 파일 저장 블록, 수정 시간, 권한 등)를 저장합니다. 캐시는 최근에 읽은 파일을 저장합니다.
세 번째 정보 줄(애플리케이션 수준에서 생각할 수 있음)
여기서 -/+ 버퍼/캐시는 각각 -buffers/cache 및 +buffers/cache입니다
-buffers/cache = 사용됨(첫 번째 줄)-buffers-cached는 실제로 현재 프로그램에서 "실제로 사용되는" "물리적 메모리"입니다.
+buffers/cache = 버퍼 +cached는 "버퍼"
used=(+buffers/cached)+(-buffers/cached)
로 시스템에 일시적으로 "대여"된 메모리 크기를 의미하므로 애플리케이션에서 프로그램 수준, 사용 가능한 메모리 = 여유 메모리+버퍼+캐시
자세한 정보는 다음과 같은 방법으로 확인할 수 있습니다.
~ cat /proc/meminfo
MemTotal: 1020128kB
MemFree: 670772kB
버퍼: 97780kB
캐시됨: 10 0980kB
SwapCached: 0 kB
활성: 164988kB
비활성: 117296kB
활성(anon): 83536 kB
비활성(anon): 160 kB
활성 (파일): 81452 kB
비활성(파일): 117136 kB
불가: 0 kB
밀폐됨: 0 kB
스왑 총계: 0 kB
스왑 프리: 0 kB
더티: 92 kB
쓰기 저장: 0 kB
AnonPages: 83504kB
매핑됨: 17500kB
Shmem: 172kB
슬래브: 46696kB
S재생 가능: 28652kB
S재생 취소: 18044kB
커널스택: 1744kB
페이지 테이블: 2636kB
NFS_Unstable: 0kB
바운스: 0 kB
WritebackTmp: 0kB
커밋 제한: 510064kB
Committed_AS: 343800kB
Vmalloc총합: 34359738367kB
Vmalloc사용: 7112kB
VmallocChunk: 34359 727304 kB
하드웨어 손상됨: 0 kB
AnonHugePages: 36864 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
대형 페이지 크기: 2048kB
DirectMap4k: 8184kB
DirectMap2M: 1040384kB
三,CPU(dstat,mp 통계)
首先我们使用 dstat命令来查看下我们的CPU情况,他能够实时的输们的信息,
每2秒输출일次,一共输출10 다음
cpu:hiq、siq分别为硬中断和软中断次数
system:int、csw分别为系统的中断次数(인터럽트)와上文切换次数( 컨텍스트 스위치 ).
-c:表示只显示我们的CPU信息
-m:表示只显示我们的内存信息
- p:表示只显示我们的进程信息
-n:表示只显示我们的网络信息
我们想以什么为么优先顺序查看,可以在后face加下列参数
mpstat
%user 여기internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/총)*100
%nice internal时间段里,nice值为负进程的CPU时间(%) (nice/total)*100
%sys internal时间段里,内核时间(%) (시스템/전체)*100
%iowait internal时间段里,硬盘IO等待时间(%) (iowait/전체)*100
%irq internal时间段里,硬中断时间( %) (irq/전체)*100
%soft internal时间段里,软中断时间(%) (softirq/total)*100
%idle internal时间段里,CPU除去等待磁盘IO操작 외부 因为任何원因而공간(%) (유휴/전체)*100
4,TCP连接数(ss,netstat)
ss是Socket 통계 그 종류의 이름은 sss命令就是에 사용되는 소켓입니다.显示更为详细的有关TCP连接信息。当我们的소켓连接数不常굉장한 时候, 无论是我们使用 netstat命令还是에서 内核中查看连接数cat /proc/net/tcp 时候道会很缓慢。
ss가 빠른 이유는 TCP 프로토콜에서 tcp_diag를 사용하기 때문입니다. tcp_diag는 Linux 커널에서 직접 정보를 얻을 수 있어 ss의 효율성을 보장합니다.
netstat과 ss를 비교할 수 있습니다.
netstat 명령은 당연합니다 ss 명령보다 훨씬 느립니다 netstat 명령 시스템의 데몬 프로세스의 연결 상태 정보를 볼 수 있고 모니터링되는 포트 번호-t: TCP 연결을 의미 -u: UDP 연결을 의미 -n: 정보를 숫자 형태로 표시 - p: 수신 포트 번호 표시