시스템의 문제점을 분석하고 확인하기 위해서는 먼저 현재 시스템 구성정보를 확인할 수 있어야 한다.
여기서 말하는 정보는 현재 사용중인 커널 버전과 부팅 시 사용한 커널, 그리고 하드웨어인 CPU 와 메모리는 어떤 것들을 사용하는지에 대한 정보들이다.
이 정보들을 바탕으로 특정 커널 버그와 특정 하드웨어 문제를 해결할 수 있다.
uname -a
옵션을 통해서 커널 정보를 확인할 수 있다.
ubuntu@ip-172-31-12-59:~$ uname -a
Linux ip-172-31-12-59 5.11.0-1022-aws #23~20.04.1-Ubuntu SMP Mon Nov 15 14:03:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
- 위 서버의 커널 버전은 Linux 5.11.0-1022-aws 버전이다. 그리고 x86 계열의 64 비트 운영 체제를 사용하고 있다.
dmesg | grep -i kernel | more
를 통해 커널이 부팅할 때 나오는 디버그 메시지로 운영 중에 발생하는 메시지를 볼 수 있다.****
그리고 커널이 하드웨어를 인식하고 드라이버를 올리는 과정과 부팅시 적용된 커널 파라미터를 확인하는게 가능하다.
ubuntu@ip-172-31-12-59:~$ sudo dmesg | grep -i kernel | more
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Netfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated NICs.
[ 0.000000] Blkfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated disks.
in your root= kernel command line option
[ 0.038067] Booting paravirtualized kernel on Xen HVM
[ 0.038915] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.11.0-1022-aws root=PARTUUID=24ca9e81-01 ro console=tty1 console=ttyS0 nvme_core.io_timeout=4294967295 p
anic=-1 // (1)
[ 0.041653] Memory: 978736K/1048180K available (16393K kernel code, 3488K rwdata, 10372K rodata, 2688K init, 5968K bss, 69184K reserved, 0K cma-reserved) // (2)
[ 0.041824] Kernel/User page tables isolation: enabled
[ 0.882078] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[ 0.885991] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[ 0.889978] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 2.205409] Loaded X.509 cert 'Build time autogenerated kernel key: ecb0788dc66cd3f3e8014485463fe429aa2b1eba'
[ 2.220262] Loaded X.509 cert 'Canonical Ltd. Kernel Module Signing: 88f752e560a1e0737e31163a466ad7b70a850c19'
[ 2.373456] Freeing unused kernel image (initmem) memory: 2688K
[ 2.381969] Write protecting the kernel read-only data: 30720k
[ 2.386692] Freeing unused kernel image (text/rodata gap) memory: 2036K
[ 2.391819] Freeing unused kernel image (rodata/data gap) memory: 1916K
[ 3.307520] systemd[1]: Listening on udev Kernel Socket.
[ 3.346216] systemd[1]: Mounting Kernel Debug File System...
[ 3.545140] systemd[1]: Mounting Kernel Trace File System...
[ 3.611301] systemd[1]: Starting Create list of static device nodes for the current kernel...
[ 3.701278] systemd[1]: Starting Load Kernel Module drm...
[ 3.793261] systemd[1]: Starting Load Kernel Modules...
[22531.000664] audit: type=1400 audit(1646338108.352:40): apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined"
name="snap.lxd.check-kernel" pid=23760 comm="apparmor_parser"
[22554.722873] audit: type=1400 audit(1646338132.073:72): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="snap.lxd.check-kernel" pid=24330 co
mm="apparmor_parser"
- (1) 에서 부팅 시에 사용한 커널 파라미터를 볼 수 있다.
- (2) 에서는 부팅 할 때 커널이 인식하는 메모리 정보를 볼 수 있고 물리 메모리와 사용 가능한 메모리 등을 볼 수 있다.
리눅스에서는 dmidecode
를 통해서 하드웨어 정보를 확인할 수 있다. dmidecode
만을 이용하면 너무 많은 정보가 출력되므로 키워드와 함께 사용할 것이 권장된다.
먼저 BIOS
를 살펴보는 명령어다.
dmidecode -t bios
명령어를 통해서 bios 정보를 볼 수 있다. 주로 특정 BIOS 버전에 문제가 있다는 보고를 보고서 확인할 때 사용한다.
ubuntu@ip-172-31-12-59:~$ sudo 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: Xen
Version: 4.11.amazon
Release Date: 08/24/2006
Address: 0xE8000
Runtime Size: 96 kB
ROM Size: 64 kB
Characteristics:
PCI is supported
EDD is supported
Targeted content distribution is supported
BIOS Revision: 4.11
- 이 BIOS 는 xen 에서 만들었고 버전은 4.11.amazon 이다.
다음은 system
키워드다.
dmidecode -t system
명령을 통해 주로 모델명을 확인하는 용도로 사용한다. 모델명을 통해서 해당 장비가 어느 정도의 성능을 내는지 확인할 수 있다.
ubuntu@ip-172-31-12-59:~$ sudo dmidecode -t system
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x0100, DMI type 1, 27 bytes
System Information
Manufacturer: Xen
Product Name: HVM domU
Version: 4.11.amazon
Serial Number: ec28691a-0746-fbe7-e8c5-f8a4125a824e
UUID: ec28691a-0746-fbe7-e8c5-f8a4125a824e
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
Status: No errors detected
- 이 제품의 모델은 Xen 에서 만든 HVM domU 이다.
다음은 processor
키워드다.
dmidecode -t processor
명령을 통해서 장비의 CPU 정보를 확인하는게 가능하다.
ubuntu@ip-172-31-12-59:~$ sudo dmidecode -t processor
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x0401, DMI type 4, 35 bytes
Processor Information
Socket Designation: CPU 1
Type: Central Processor
Family: Other
Manufacturer: Intel
ID: F2 06 03 00 FF FB 8B 17
Version: Not Specified
Voltage: Unknown
External Clock: Unknown
Max Speed: 2400 MHz
Current Speed: 2400 MHz
Status: Populated, Enabled
Upgrade: Other
L1 Cache Handle: Not Provided
L2 Cache Handle: Not Provided
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
- 여기선 하나의 소켓이 있고 코어는 하나다.
다음 명령어를 통해서도 확인이 가능하다. /proc/cpuinfo
ubuntu@ip-172-31-12-59:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
stepping : 2
microcode : 0x46
cpu MHz : 2399.971
cache size : 30720 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips : 4800.04
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
그리고 lscpu
명령을 통해서도 조회가 가능한데 이 경우에는 NUMA 아키텍처와 관련된 내용까지도 알 수 있다.
dmidecode
에서 memory
키워드로 메모리 정보를 확인할 수 있다.
ubuntu@ip-172-31-12-59:~$ sudo dmidecode -t memory
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x1000, DMI type 16, 19 bytes
Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 1 GB
Error Information Handle: Not Provided
Number Of Devices: 1
Handle 0x1100, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: 0x0000
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM 0
Bank Locator: Not Specified
Type: RAM
Type Detail: None
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 는 NUMA 아키텍처에 따라서 하나의 CPU 소켓에 할당된 로컬 메모리를 말한다. 그리고 Memory Device 는 시스템에 꽂혀있는 메모리들을 말하고. 여기서는 하나의 소켓과 하나의 메모리가 꽂혀져 있어서 Physical Memory Array 와 Memory Device 가 여러개 나오진 않는다.
df -h
명령을 통해서 디스크 정보를 확인하는게 가능하다.
ubuntu@ip-172-31-12-59:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 3.7G 26G 13% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 485M 0 485M 0% /dev/shm
tmpfs 97M 932K 96M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 485M 0 485M 0% /sys/fs/cgroup
/dev/loop0 25M 25M 0 100% /snap/amazon-ssm-agent/4046
/dev/loop1 56M 56M 0 100% /snap/core18/2253
/dev/loop3 68M 68M 0 100% /snap/lxd/21835
/dev/loop2 62M 62M 0 100% /snap/core20/1242
tmpfs 97M 0 97M 0% /run/user/1000
/dev/loop5 56M 56M 0 100% /snap/core18/2284
/dev/loop6 62M 62M 0 100% /snap/core20/1361
/dev/loop7 44M 44M 0 100% /snap/snapd/14978
/dev/loop8 27M 27M 0 100% /snap/amazon-ssm-agent/5163
/dev/loop9 68M 68M 0 100% /snap/lxd/22526
- 여기서는 여러개의 파티션들이 마운트 되어 있는 것들을 볼 수 있다. 가장 대표적으로 /dev/root 파일 시스템으로 디스크가 네이밍 되어 있고 총 30G 를 저장할 수 있다고 한다. 그 중 3.7G 를 사용했고 26G 를 더 사용할 수 있다.
- 여기서는 나오지 않지만 디스크의 Filesystem 영역이 각각 다를 수 있는데
/dev/sda
,/dev/hda
,/dev/vda
등 다양할 수 있다.
ethtool eth0
명령을 통해서 연결 상태를 확인하는게 가능하다.
ubuntu@ip-172-31-12-59:~$ ethtool eth0
Settings for eth0:
Cannot get wake-on-lan settings: Operation not permitted
Link detected: yes
- 네트워크 연결이 정상적으로 되어 있다는 걸 확인할 수 있다.
- 원래는 speed 프로퍼티를 통해서 현재 연결되어있는 네트워크 속도를 알 수 있고 네트워크가 보낼 수 있는 속도는
Supoorted link modes
와Advertised link modes
를 통해서 볼 수 있다.
그리고 ethtool -g eth0
명령을 통해 Ring Buffer 의 크기를 확인할 수 있고 최적화를 할 수 있다.
Ring Buffer 는 케이블을 통해서 들어온 패킷이 가장 먼저 복사되는 곳으로 네트워크 카드에 있는 버퍼 공간이다.
이 영역이 작다면 네트워크 성능 저하를 일으킬 수 있다.
ethtool -G eth0 {영역} {값}
(ethtool -G eth0 rx 255
) 이런 식으로 G 옵션을 통해서 값을 설정할 수 있다.
ethtool -i eth0
옵션을 통해 네트워크 카드가 어떤 커널 드라이버를 사용하는지, 버전이 몇인지를 알 수 있다.