OS 11

lsof

list open files현재 시스템에 열려 있는 모든 파일의 목록을 보여준다. 리눅스는 일반 파일뿐만 아니라 디렉토리, 디바이스, 프로세스, 소켓 등 모든 것이 파일로 표현된다.따라서 해당 명령을 이용해서 특정 파일을 점유중인 프로세스를 체크하거나, 특정 포트를 어떤 프로세스가 사용중인지 확인하는 것이 가능하다. Column 값 설명COMMAND : 파일을 열고 있는 실행 프로그램 이름PID : 프로세스 IDTID : Task ID(=Thread ID)TASKCMD : 스레드 이름USER : 파일을 연 사용자FD : File Descriptor, 프로세스가 어떤 용도, 어떤 권한으로 열었는지숫자r : 읽기 전용 (숫자는 파일 디스크립터 번호)숫자w : 쓰기 전용숫자u : 읽기 쓰기 둘다 가능cwd :..

Linux 2026.01.19

tcpdump

네트워크 패킷 수집을 하기 위해서 tcpdump를 사용한다.애플리케이션 응답 지연 같은 네트워크 이슈를 추적하기 위해 사용한다.수집한 패킷들을 직접 훑어 볼 수도 있고 덤프 뜬 파일을 와이어샤크 툴로 분석할 수도 있다. 자주 사용하는 옵션-nn : 대표 포트를 프로토콜로 치환하지 않고 포트 번호를 그대로 보여준다.-vvv : 출력 결과에 모든 정보를 포함한다.-A : 패킷의 페이로드를 ASCII 형태로 출력한다. 평문인 경우 전송되는 데이터를 볼 수 있다.-G [시간] : 입력한 시간 값 간격으로 패킷을 수집한다. (초 단위)-w [파일명] : 수집한 패킷 내용을 파일로 지정해서 저장한다.-Z : tcpdump 실행 권한 지정host [ip] and port [port] : 지정한 ip나 port가 포함..

Linux 2026.01.06

strace

프로세스가 동작하는 동안 호출하는 시스템 콜들을 추적할 수 있는 명령어. 기본적인 명령어 동작부터 서버에 올라와 있는 애플리케이션까지 시스템 콜 추적이 가능하고, 서버내 프로세스의 이상 동작이 의심될 경우에도 strace를 통해 프로파일링을 진행한다. 주요 옵션-s : 출력 문자열의 최댓 값. (기본=32, 최대=65535), 출력 값이 잘려서 나올 경우 해당 옵션으로 최댓 값을 주어 다시 실행-t : timestamp, (-tt : microseconds 단위까지 출력, -ttt : 유닉스 타임)-T : 각 시스템 콜이 호출되는데 소요된 시간을 행 끝에 출력-f : fork()로 생성된 자식 프로세스의 시스템 콜까지 추적 (멀티 스레드, 멀티 프로세스 애플리케이션 추적 시 필요)-o : 출력 결과를 파..

Linux 2026.01.05

ss (Socket Statistics)

네트워크 소켓 상태를 확인하는 도구. netstat이라는 명령어도 있는데, netstat을 대체하기 위해 개발된 툴로 훨씬 빠르고 좋다. 자주 사용하는 옵션-a : 모든 소켓 표시 (접속 대기 중인 것과 연결된 것 모두)-t : TCP 소켓만 표시-u : UDP 소켓만 표시-n : 서비스 이름 대신 포트 번호로 표시-l : Listening 상태(접속 대기 중)인 소켓만 표시-p : 해당 소켓을 사용하는 pid와 이름 표시-s : 통계 표시 자주 쓰는 형태ss -tunlp : 현재 리스닝 중인 모든 포트 확인ss -at : 현재 서버에 연결된 모든 TCP 세션 확인ss -s : 프로토콜별로 몇 개의 연결이 있는지 요약 정보 확인 필드 설명Netid : 소켓 유형 (TCP, UDP...)State : 소켓..

Linux 2026.01.02

vmstat

시스템 상에서 프로세스, 메모리, 페이징, I/O, CPU 등을 실시간으로 모니터링하기 위해 vmstat이라는 명령을 사용한다. procr : 실행 대기 중인 프로세스 수, cpu 코어 수보다 높으면 cpu 병목 체크해야 함.b : i/o 작업 등으로 인터럽트가 불가능한 대기 상태에 있는 프로세스 수. memoryswpd : swap 메모리 사용량free : 사용 가능한 여유 물리 메모리buff : 버퍼로 사용된 메모리 (i/o 작업으로 인한 임시 저장)cache : 캐시로 사용된 메모리 (파일 읽기 등 성능 향상용) swapsi (swap-in) : 스왑 영역(디스크)에서 메모리로 불러들이는 양so (swap-out) : 메모리에서 스왑 영역(디스크)로 밀어내는 양* 스왑 메모리가 사용되는 것은 ..

Linux 2025.12.30

top

top는 시스템의 전체적인 혹은 프로세스 별 리소스를 체크하기 위해 가장 널리 알려지고 간단하게 사용하는 명령어다. [상단 %Cpu(s)]us (user) : 사용자 영역 CPU- 애플리케이션, 사용자 프로세스가 사용하고 있는 cpu sy (system) : 커널 영역 CPU- 커널, 시스템 콜, 드라이버 등 시스템에서 사용하고 있는 cpu ni (nice) : nice 적용 프로세스- nice 값이 변경된 프로세스 (우선순위 변경) id (idle) : idle 상태, 놀고 있는 CPU 비율 wa (iowait) : I/O 대기- 디스크, 네트워크 I/O 대기로 인해 CPU가 쉰 시간 비율 hi (hardware irq) : 하드웨어 인터럽트로 인해 CPU가 사용된 시간 비율- NIC, disk 인터..

Linux 2025.12.29

Load Average

uptime 혹은 top 명령으로 확인할 수 있는 부하 평균 값(Load Average)은 실행 중이거나 실행을 기다리는 프로세스의 평균을 의미한다. 이것은 단순히 CPU 사용률을 의미하는 것이 아닐뿐더러, 수치를 어떻게 해석해야 할 지를 정리한다. 프로세스는 현재 상태에 따라 여러가지 상태 값을 가지는데, R, D 상태의 프로세스들이 부하 평균에 들어간다. Running / Runnable (R) : CPU에서 실행 중이거나 실행 대기 중인 프로세스Uninterruptable Sleep (D) : I/O 대기중인 프로세스 (디스크, 네트워크 등) 세 개의 값은 각각 1분, 5분, 15분 동안의 부하 평균을 의미하는데, 커널이 매 5초마다 프로세스 수를 체크해서 이동 평균값을 갱신한다. 각 수치는 CPU..

Linux 2025.12.26

interrupt와 context switch

시스템 리소스 체크 툴 중에 dstat이라는 것을 이용하면 system 항목에 int, csw라는 필드가 있다. (vmstat이나 sar로도 확인 가능하다.)각각 interrupt와 context switch 횟수를 의미한다. interrupt : 하드웨어 이벤트가 발생할 때 cpu에 전달하는 신호, 마우스 클릭, 네트워크 패킷 수신 등... context switch : CPU가 실행중인 프로세스를 중단하고, 다른 프로세스로 교체하는 과정.멀티 태스킹 환경에서 가지고 있는 cpu 보다 훨씬 많은 프로세스들이 동시에 실행되는데, 정확히는 context switch를 통해 cpu 자원을 각 프로세스들이 빠르게 교체하면서 사용한다. 네트워크 트래픽이 많아지면 당연히 int는 증가한다. NIC에서 패킷을 처..

Linux 2025.12.22

I/O 스케줄러

기본적으로 디스크 입출력은 CPU의 관점에서 매우 느린 작업이다.따라서, 디스크 입출력이 발생하면 캐시/버퍼, 스케줄러 등 OS에서는 여러 가지 방법을 통해 성능 보완을 한다. 그런데, 사실 예전의 HDD는 디스크 헤더가 물리적으로 이동하면서 데이터를 읽는 방식, 쉽게 말하면 기계적인 방식으로 I/O가 처리됐기 때문에 커널의 I/O 스케줄러는 매우 중요한 요소였다. 하지만 플래시 메모리 기반의 SSD는 전기적 신호로 데이터가 입출력되기 때문에 스케줄러가 사실상 필요가 없다. 오히려 커널에서 입출력을 병합하고 정렬하는 것이 더 병목일 수 있다. cat /sys/block/sda/queue/scheduler 명령을 실해하면 현재 OS에서 사용중인, 사용할 수 있는 스케줄러를 확인할 수 있는데, 대괄호 표시 ..

Linux 2025.12.19

rrqm과 wrqm

디스크 성능 및 리소스 체크 시 iostat이라는 명령어를 사용한다. iostat -x 시 확장된 통계 지표를 제공하는데, 그 중에 rrqm과 wrqm이라는 지표가 있다. Read Request MergeWrite Request Merge 병합된 요청 읽기/쓰기 수를 의미한다. OS에서 IO 작업 시 디스크에 인접한 요청들은 병합해서 한꺼번에 처리한다. (그렇게 해야 디스크 접근이 조금이라도 줄어드니까)그렇기 때문에 해당 지표가 높다는 것은 io 처리가 순차적으로 효율적이게 처리되고 있다는 것을 의미한다. 만약 이 지표들이 낮으면 디스크 랜덤 io의 비중이 높다는 것이고, 특히 데이터베이스 서버인 경우 이런 현상은 성능 모니터링이 필요하다.

Linux 2025.12.18