[운영체제] 시스템 성능 구조와 최적화(네트워크)

업데이트:

시스템 성능 구조와 최적화 - 네트워크

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층       도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

네트워크 분석은 하드웨어와 소프트웨어에 걸쳐 있다. 네트워크는 혼잡 가능성이 있기 때문에 낮은 성능의 원인으로 자주 지적 받곤 한다. 통신은 패킷이라고 하는 메시지를 전송하는 방식으로 이뤄지며, 패킷은 보통 페이로드 데이터를 담는다.
캡슐화는 메타 데이터를 페이로드의 앞부분과 끝 부분 뒤를 추가하는 것이다.

  • 인터페이스: 물리적 네트워크 커넥터를 의미
  • 패킷(packet): IP 수준의 라우팅 가능한 메시지를 의미
  • 프레임(frame): 물리적인 네트워크 수준의 메시지를 의미.
  • 대역폭(bandwidth): 최대 데이터 전송 비율
  • 스루풋: 두 네트워크 끝점 사이의 현재 데이터 전송 비율
  • 지연시간: 어떤 메시지가 두 끝점 사이를 왕복하는데 걸린 시간 또는 connection맺는데 걸린 시간.
  • 페이로드(payload): 사용에 있어 전송되는 데이터를 의미.
  • Maximum Transmission Unit(MTU): 최대 전송 유닛

네트워크 인터페이스: 네트워크 연결을 위한 운영체제의 끝점. 인터페이스는 시스템 관리자가 설정하고 관리하는 추상적인 요소임.

netstat

  • enp2s0 : 이더넷
  • lo : loopback
  • wlp1s0 : wireless
옵션 설명
기본 연결한 소켓 목록을 보여줌
-a 모든 소켓의 정보 목록을 보여줌
-s 네트워크 스택 통계를 보여줌
-i 네트워크 인터페이스 통계를 보여줌
-r 라우팅 테이블을 보여줌


결과창 설명
Iface 네트워크 인터페이스
MTU 최대전송 유닛
RX- 수신
TX- 송신
OK 전송에 성공한 패킷 수
ERR 패킷 오류 수
DRP 드롭한 패킷 수
OVR 패킷 오버런(overrun) 수


좀 더 세부적인 내용은 아래 디렉토리 참조

$ cd /proc/net/snmp
$ cd /proc/net/netstat

$ grep ^Tcp /proc/net/snmp

sar

시스템 활동 보고(system activity reporter)를 의미.

옵션 설명
-n DEV 네트워크 인터페이스 통계
-n EDEV 네트워크 인터페이스 오류
-n IP IP 데이터그램 통계
-n EIP IP 오류 통계
-n TCP TCP 통계
-n ETCP TCP 오류 통계
-n SOCK  

ping

ping 명령은 ICMP 메아리 요청 패킷을 보내서 네트워크 연결성을 테스트한다.

$ ping www.naver.com

tcpdump

tcpdump를 이용하면 네트워크 패킷을 캡처해 분석할 수 있다. 이 도구는 패킷 요약을 STDOUT에 출력하거나 패킷 데이터를 나중에 분석할 수 있게 파일에 저장할 수 있다. 보통 후자 쪽이 더 실용적이다. 왜냐면 패킷 도착 속도가 너무 빨라서 실시간으로 요약 정보를 쫓아갈 수 없기 때문이다.

// eth4 인터페이스의 패킷을 /tmp에 있는 파일에 덤프하기 
$ tcpdump -i eth4 -w /tmp/out.tcpdump

// 덤프 파일에서 패킷 살펴보기
$ tcpdump -n /tmp/out.tcpdump

// 자세한 정보 표시(-v), 링크 계층 헤더 표시(-e), 16진 주소 덤프(-x or -X)
$ tcpdump -enr /tmp/out.tcpdump -vvv -X

DTrace

DTrace를 이용하면 네트워크 이벤트를 커널과 애플리케이션 내부에서 살펴볼 수 있다. 소켓 연결, 소켓 I/O, TCP이벤트, 패킷 전송, 백로그 드롭, TCP 재전송 등 여러 자세한 부분을 살펴볼 수 있다.

// connect()를 통한 외부 연결 횟수 세기
$ dtrace -n 'syscall::connect:entry { @[execname] = count(); }'

// accept()를 통해 들어오는 연결 횟수 세기
$ dtrace -n 'syscall::accept:return { @[execname] = count(); }'

// 이름이 ssh인 프로세스가 connect() 호출 할 때의 사용자 스택 트레이스
$ dtrace -n 'syscall::connect:entry /execname == "ssh"/ { ustack(); }'
 

참고: 시스템 성능 분석과 최적화, 브렌든 그래그

태그:

카테고리:

업데이트: