시스템 문제를 파악하기 위해서는 시스템 구성 정보 확인이 우선이다. 시스템의 정보를 알아야 시스템을 분석할 수 있다.
커널 정보 확인하기
uname -a
user1@worker1:~/Desktop$ uname -a
Linux worker1 5.15.0-88-generic #98~20.04.1-Ubuntu SMP Mon Oct 9 16:43:45 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
커널 버전: 5.15.0-88-generic
dmesg
: 커널 디버그 메시지를 출력한다.
user1@worker1:~/Desktop$ dmesg | grep -i kernel | more
[ 0.000000] KERNEL supported cpus:
[ 0.020813] Booting paravirtualized kernel on VMware hypervisor
[ 0.105081] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-88-generic root=UUID=ed7d22c
d-423e-49bc-9150-c80dc25b1f3e ro find_preseed=/preseed.cfg auto noprompt priority=critical local
e=en_US quiet
[ 0.105179] Unknown kernel command line parameters "auto noprompt BOOT_IMAGE=/boot/vmlinuz-5.
15.0-88-generic find_preseed=/preseed.cfg priority=critical locale=en_US", will be passed to use
r space.
[ 0.129935] Memory: 1892860K/2096628K available (16393K kernel code, 4388K rwdata, 10848K rod
ata, 3356K init, 18724K bss, 203508K reserved, 0K cma-reserved)
[ 0.131695] Kernel/User page tables isolation: enabled
...
Kernel command line: 커널 부팅 시 사용한 파라미터를 의미한다.
/proc 파일 시스템에서도 확인할 수 있다.
user1@worker1:~/Desktop$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.15.0-88-generic root=UUID=ed7d22cd-423e-49bc-9150-c80dc25b1f3e ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
BOOT_IMAGE, root, find_pressed, priority, locale까지 총 5개의 파라미터가 적용
책에서는 intel_idle.max_cstate, crashkernel, biosdevname, console까지 총 4개의 파라미터가 적용
intel_idle.max_castate
- 이는 특별한 작업이 없는 Idle 상태가 되면 일부 CPU 코어를 잠자기 모드로 전환한다.하드웨어 BIOS 설정에서 이를 꺼도 소프트웨어 모듈인 intel_idle에 의해 켜지는 경우가 있다.
- 이 옵션은 부팅 시 하드웨어 BIOS 설정에서 설정한다.
- CPU에는 C-state라는 옵션이 있다.
Memory: 부팅 시에 커널이 인식하는 메모리 정보이다.
물리적인 메모리 크기와 실제 사용 가능한 메모리의 크기를 확인할 수 있다.
가용 메모리 크기는 부팅 전과 후에 차이가 있는데, 이는 부팅 과정에서 사용된 일부 메모리가 반환되기 때문이다.
현재 사용 중인 커널의 컴파일 옵션은 아래와 같이 확인할 수 있다.
user1@worker1:~/Desktop$ cat /boot/config-5.15.0-88-generic | more
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 5.15.0-88-generic Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=90400
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23400
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=23400
CONFIG_LLD_VERSION=0
...
CPU 정보 확인하기
dmidecode를 통해 하드웨어 정보 확인
bios
root@worker1:~# dmidecode -t bios
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Phoenix Technologies LTD
Version: 6.00
Release Date: 11/12/2020
Address: 0xEA480
Runtime Size: 88960 bytes
ROM Size: 64 kB
Characteristics:
ISA is supported
PCI is supported
...
Targeted content distribution is supported
BIOS Revision: 4.6
Firmware Revision: 0.0
BIOS 버전에 문제가 있다는 보고가 있고, 내가 사용하는 버전이 이 버전에 해당하는지를 확인할 때 주로 사용한다.
system
root@worker1:~# dmidecode -t system
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: VMware, Inc.
Product Name: VMware Virtual Platform
Version: None
Serial Number: VMware-56 4d 4f 07 a6 a7 d6 94-1c 96 76 de 43 64 15 9a
UUID: 074f4d56-a7a6-94d6-1c96-76de4364159a
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
Handle 0x01A1, DMI type 15, 29 bytes
System Event Log
Area Length: 16 bytes
Header Start Offset: 0x0000
Header Length: 16 bytes
Data Start Offset: 0x0010
Access Method: General-purpose non-volatile data functions
Access Address: 0x0000
Status: Invalid, Full
Change Token: 0x00000036
Header Format: Type 1
Supported Log Type Descriptors: 3
Descriptor 1: POST error
Data Format 1: POST results bitmap
Descriptor 2: Single-bit ECC memory error
Data Format 2: Multiple-event
Descriptor 3: Multi-bit ECC memory error
Data Format 3: Multiple-event
Handle 0x0265, DMI type 23, 13 bytes
System Reset
Status: Enabled
Watchdog Timer: Present
Boot Option: Do Not Reboot
Boot Option On Limit: Do Not Reboot
Reset Count: Unknown
Reset Limit: Unknown
Timer Interval: Unknown
Timeout: Unknown
Handle 0x0268, DMI type 32, 20 bytes
System Boot Information
Status: No errors detected
장비는 VMware, Inc.에서 만든 VMware Virtual Platform 모델이다.
(아무래도 VM ware에서 test를 해서 그런거 같다..)
processor
: 장비의 CPU 정보를 확인할 수 있다.
root@worker1:~# dmidecode -t processor
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x0004, DMI type 4, 42 bytes
Processor Information
Socket Designation: CPU #000
Type: Central Processor
Family: Unknown
Manufacturer: GenuineIntel
ID: C1 06 08 00 FF FB 8B 1F
Version: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
Voltage: 3.3 V
External Clock: Unknown
Max Speed: 30000 MHz
Current Speed: 2800 MHz
Status: Populated, Enabled
Upgrade: ZIF Socket
L1 Cache Handle: 0x0094
L2 Cache Handle: 0x0114
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Core Count: 2
Core Enabled: 2
Characteristics:
64-bit capable
Multi-Core
Execute Protection
Handle 0x0004, DMI type 4, 42 bytes
Processor Information
Socket Designation: CPU #001
Type: Central Processor
Family: Unknown
Manufacturer: GenuineIntel
ID: C1 06 00 00 FF FB 8B 1F
Version: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
Voltage: 3.3 V
External Clock: Unknown
Max Speed: 30000 MHz
Current Speed: 2800 MHz
Status: Populated, Enabled
Upgrade: ZIF Socket
L1 Cache Handle: 0x0094
L2 Cache Handle: 0x0114
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Core Count: 2
Core Enabled: 2
Characteristics:
64-bit capable
Multi-Core
Execute Protection
...
소켓: 물리적인 cpu 개수
코어: cpu 안에 몇 개의 컴퓨팅 코어가 있는지
아래와 같은 방법으로도 CPU 정보를 확인할 수 있다.
/proc/cpuinfo
root@worker1:~# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 140
model name : 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
stepping : 1
microcode : 0xffffffff
cpu MHz : 2803.212
cache size : 12288 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
...
lscpu
root@worker1:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 45 bits physical, 48 bits virtual
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 140
Model name: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
Stepping: 1
CPU MHz: 2803.212
BogoMIPS: 5606.42
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 96 KiB
L1i cache: 64 KiB
L2 cache: 2.5 MiB
L3 cache: 12 MiB
NUMA node0 CPU(s): 0,1
...
메모리 정보 확인하기
dmidecode 에서 memroy 키워드 사용
root@worker1:~# dmidecode -t memory
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
...
Handle 0x01A2, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 3 GB
Error Information Handle: Not Provided
Number Of Devices: 64
Handle 0x01A3, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x01A2
Error Information Handle: No Error
Total Width: 32 bits
Data Width: 32 bits
Size: 2048 MB
Form Factor: DIMM
Set: None
Locator: RAM slot #0
Bank Locator: RAM slot #0
Type: DRAM
Type Detail: EDO
Speed: Unknown
Manufacturer: Not Specified
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Rank: Unknown
Configured Memory Speed: Unknown
Handle 0x01A4, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x01A2
Error Information Handle: No Error
Total Width: Unknown
Data Width: Unknown
Size: No Module Installed
Form Factor: DIMM
Set: None
Locator: RAM slot #1
Bank Locator: RAM slot #1
Type: DRAM
Type Detail: Unknown
Speed: Unknown
Manufacturer: Not Specified
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Rank: Unknown
Configured Memory Speed: Unknown
...
physical memory array와 memory device가 존재한다.
physical memory array: memeory device의 그룹, 하나의 CPU 소켓에 함께 할당된 물리 메모리의 그룹을 의미한다.
memory device: 실제로 시스템에 꽂혀 있는 메모리를 의미한다.
책과는 반대로 첫 번째 memory device에는 2048MB 메모리가 꽂혀 있으며, 두 번째 memory device에는 메모리가 꽂혀 있지 않다(No module Installed).
free와 비교
root@worker1:~# dmidecode -t memory | grep -i size:
...
Size: 2048 MB
Size: No Module Installed
...
root@worker1:~# free -m
total used free shared buff/cache available
Mem: 1928 990 86 1 851 774
Swap: 0 0 0
free 명령을 통해 확인한 전체 메모리 크기와 다르다면 시스템의 메모리 인식에 문제가 있다는 것이다.
디스크 정보 확인하기
파티션과 디스크 타입 정보 확인
컴퓨팅에서 파티션은 물리적 디스크의 논리적 분할입니다. 이는 본질적으로 하드 드라이브나 기타 저장 장치의 저장 공간을 구성하고 관리하는 방법입니다. 파티션은 다양한 운영체제 분리, 데이터 정리, 성능 향상 등 다양한 목적으로 사용됩니다.
C: 와 D: 로 나누는 것도 파티션을 나누는 것이다.
df -h
root@worker1:~# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/sda5 20G 12G 6.9G 63% /
...
/dev/sda1 511M 4.0K 511M 1% /boot/efi
...
총 2개의 파티션이 있으며 각각의 파티션은 /, /boot/efi에 마운트되어 있다. 디스크는 /dev/sda라는 이름으로 시스템에 네이밍되어 있다.
컨트롤러: 시스템과 디스크 통신 중개자 역할
IDE 타입과 SCSI 타입이 대표적이다.
sda: SCSI 방식의 디스크, SATA, SAS와 같은 일반적인 하드 디스크
hda: IDE 방식의 디스크
vda: 가상 서버에서 흔히 볼 수 있는 디스크 타입으로, XEN, KVM와 같이 하이퍼바이저 위에서 동작 중인 서버들에서 주로 볼 수 있다.
디스크의 물리적 정보 확인
smartctl을 사용
root@worker1:~# smartctl -a /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.15.0-88-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Vendor: VMware,
Product: VMware Virtual S
Revision: 1.0
User Capacity: 21,474,836,480 bytes [21.4 GB]
Logical block size: 512 bytes
Rotation Rate: Solid State Device
Device type: disk
Local Time is: Mon Apr 1 06:55:46 2024 PDT
SMART support is: Unavailable - device lacks SMART capability.
=== START OF READ SMART DATA SECTION ===
Current Drive Temperature: 0 C
Drive Trip Temperature: 0 C
Error Counter logging not supported
Device does not support Self Test logging
내가 테스트한 환경에서는 꽤나 자세한 정보를 확인할 수 있다.
책에서 설명해준 경우에는 RAID 컨트롤러를 통해 만들어진 Logical Volume이라 실제 물리적인 디스크의 정보까지 확인할 수 없었다.
하지만 smartctl -a /dev/sda -d cciss,0 을 통해 상세한 정보를 확인할 수 있다. smartctl은 RAID 컨트롤러의 드라이버에 따라 -d 옵션 뒤에 추가 옵션을 통해 디스크의 정보를 볼 수 있다. lsmod 명령을 통해 드라이버를 확인할 수 있다. cciss는 HP에서 제공하는 RAID 컨트롤러에서 사용하는 드라이버이다. 뒤의 숫자는 디스크 베이를 의미한다.
디스크베이
드라이브 베이라고도 하는 디스크 베이는 하드 디스크 드라이브(HDD) 또는 솔리드 스테이트 드라이브(SSD)와 같은 저장 장치를 고정하고 연결하도록 설계된 컴퓨터 또는 서버 섀시의 물리적 슬롯 또는 인클로저입니다
네트워크 정보 확인하기
네트워크 카드 정보 확인
root@worker1:~# lspci | grep -i ether
02:00.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
이 정보가 필요한 이유
- 특정 모델에서 버그나 이슈 등이 보고될 때
- 커널 드라이버 업데이트할 때
연결 상태 확인
root@worker1:~# ethtool ens32
Settings for ens32:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
해당 네트워크 카드가 어느 정도의 속도까지 지원 가능한지, 현재 연결되어 있는 속도는 얼마인지, 네트워크 연결은 정상인지를 확인할 수 있다.
Speed: 1000Mb/s 가 현재 속도를 의미하며, 서버가 속도가 나오지 않는다면 이를 살펴보아야 한다.
Ring Buffer 크기 확인
root@worker1:~# ethtool -g ens32
Ring parameters for ens32:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
Ring Buffer: 네트워크 카드의 버퍼 공간
케이블을 통해서 패킷 정보가 들어오면 Ring Buffer에 복사된다. 그 후 커널에 패킷의 도착을 알리고 패킷의 정보를 다시 커널로 복사한다. 그렇기 때문에 Ring Buffer의 크기가 작다면 네트워크 성능 저하를 일으킬 수 있다.
-G 옵션을 통해 값을 설정할 수 있다.
root@worker1:~# ethtool -G ens32 rx 200
root@worker1:~# ethtool -g ens32
Ring parameters for ens32:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 200
RX Mini: 0
RX Jumbo: 0
TX: 256
성능 최적화 옵션
root@worker1:~# ethtool -k ens32
Features for ens32:
rx-checksumming: off
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
...
generic-segmentation-offload: on
tcp-offload 기능: MTU 이상의 크기를 가지는 패킷의 분할 작업을 CPU가 아닌 네트워크 카드가 직접 함으로써 CPU의 부담을 줄이고 패킷 처리 성능을 높이는 기능
커널 모듈 정보 표시
root@worker1:~# ethtool -i ens32
driver: e1000
version: 5.15.0-88-generic
firmware-version:
expansion-rom-version:
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
특정 커널 드라이버의 버전에서 문제가 생겼을 때 내가 사용하는 버전과 비교할 때 필요하다.
<참고>
DevOps와 SE를 위한 리눅스 커널 이야기
'Study > Linux' 카테고리의 다른 글
[Linux]swap (0) | 2024.04.14 |
---|---|
[Linux]free 명령과 메모리 (0) | 2024.04.10 |
[Linux]Load Average와 시스템 부하 (0) | 2024.04.09 |
[Linux]top을 통해 살펴보는 프로세스 정보들 (0) | 2024.04.06 |
[Linux]gcc 컴파일 (0) | 2020.12.16 |