두 가지 문제

홈서버를 며칠 돌려보니 두 가지가 눈에 띄었다.

  1. Immich 썸네일 생성 같은 작업이 걸리면 CPU 온도가 85°C까지 치솟는다. 24시간 켜두는 서버라 장기적으로 하드웨어에 좋지 않다.
  2. Grafana 대시보드를 보니 RAM 사용률이 38%인데 Swap을 26%나 사용하고 있었다. RAM이 절반도 안 찼는데 Swap을 쓰는 건 비정상이다.

두 문제를 각각 TLP + thinkfan, swappiness 튜닝으로 해결했다.


1부: TLP + thinkfan으로 온도 낮추기

TLP 설치

TLP는 Linux용 전력 관리 도구다. 설치만 해도 기본값으로 어느 정도 효과가 있고, ThinkPad에 맞게 튜닝하면 훨씬 효과적이다.

sudo apt install tlp tlp-rdw -y
sudo tlp start

설치 확인:

sudo tlp-stat -s
--- TLP 1.6.1 --------------------------------------------
+++ TLP Status
State          = enabled
Mode           = AC
Power source   = AC

TLP 튜닝

sudo vi /etc/tlp.conf

아래 항목을 찾아서 주석 해제 후 값을 수정한다.

CPU_SCALING_GOVERNOR_ON_AC=powersave
CPU_ENERGY_PERF_POLICY_ON_AC=balance_power
CPU_BOOST_ON_AC=0
PLATFORM_PROFILE_ON_AC=balanced

핵심은 CPU_BOOST_ON_AC=0이다. 터보 부스트를 끄는 것만으로도 온도가 10~20°C 내려간다. 홈서버 용도에서는 최대 성능이 필요한 순간이 거의 없기 때문에 체감 성능 저하도 없다.

sudo tlp start

thinkfan 설치

thinkfan은 온도 구간별로 팬 속도를 직접 제어하는 도구다. ThinkPad 기본 팬 제어보다 세밀하게 조절할 수 있다.

sudo apt install thinkfan -y

thinkpad_acpi 팬 제어 권한 활성화:

echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkpad_acpi.conf
sudo modprobe -r thinkpad_acpi
sudo modprobe thinkpad_acpi fan_control=1

센서 경로 확인:

find /sys/devices -name "temp*_input" 2>/dev/null

ThinkPad CPU 온도 센서는 보통 아래 경로에 있다.

/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/temp1_input

hwmon 뒤의 숫자는 환경마다 다를 수 있으니 직접 확인하자.

thinkfan 설정

sudo vi /etc/thinkfan.conf
sensors:
  - hwmon: /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/temp1_input

fans:
  - tpacpi: /proc/acpi/ibm/fan

levels:
  - [0, 0, 55]
  - [1, 50, 60]
  - [2, 55, 65]
  - [3, 60, 70]
  - [4, 65, 75]
  - [5, 70, 80]
  - [7, 75, 255]
레벨 온도 구간 동작
0 ~55°C 팬 정지
1 50~60°C 최저속
2 55~65°C 저속
3 60~70°C 중저속
4 65~75°C 중속
5 70~80°C 고속
7 75°C~ 최대속

서비스 시작:

sudo systemctl enable thinkfan
sudo systemctl start thinkfan
sudo systemctl status thinkfan

온도 개선 결과

적용 전 적용 후
CPU 온도 (풀로드) 85°C 55~66°C
팬 RPM 3600 RPM 1800 RPM
GPU 온도 79°C 48~59°C

TLP 터보 부스트 비활성화만으로도 약 20~30°C 온도가 내려갔다. 24시간 상시 운영 환경에서는 성능보다 안정성이 중요하기 때문에 이 설정이 최적이다.

부팅 시 자동 적용 확인

sudo systemctl is-enabled tlp
sudo systemctl is-enabled thinkfan
# 둘 다 "enabled" 출력되면 정상

2부: swappiness 튜닝

문제 발견

Grafana 대시보드를 보다가 이상한 걸 발견했다.

Grafana - RAM 38% 사용 중인데 Swap 26% 사용

RAM 사용률은 37.8%인데 Swap을 26%나 쓰고 있었다. Swap은 SSD를 메모리처럼 쓰는 거라 RAM보다 훨씬 느리다. 불필요하게 Swap을 쓰면 전체 성능이 저하된다.

swappiness란?

vm.swappiness는 커널이 얼마나 적극적으로 Swap을 사용할지 결정하는 값이다.

설명 적합한 환경
0 Swap 거의 사용 안 함 RAM이 매우 넉넉한 서버
10 RAM 거의 다 찰 때만 Swap 사용 홈서버, 일반 서버
60 Ubuntu 기본값 데스크탑
100 적극적으로 Swap 사용 RAM이 매우 부족한 환경

Ubuntu 기본값이 60인데, 홈서버처럼 RAM이 충분한 환경에서는 너무 높다.

튜닝 적용

즉시 적용:

sudo sysctl vm.swappiness=10

재부팅 후에도 유지:

echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

적용 확인:

cat /proc/sys/vm/swappiness
# 10

기존 Swap에 올라간 데이터를 RAM으로 옮겨서 효과를 바로 확인한다.

sudo swapoff -a && sudo swapon -a

튜닝 결과

Grafana - Swap 사용량이 7%대로 감소

기존 26%가량 사용하던 Swap이 7%대로 떨어진 것을 확인할 수 있다.


정리

온도 관리:

  • TLP CPU_BOOST_ON_AC=0 하나로 온도 20~30°C 감소
  • thinkfan으로 팬 커브를 직접 제어해서 불필요한 소음 줄임
  • 홈서버는 성능보다 안정성이 중요하므로 터보 부스트 끄는 게 최선

Swap 튜닝:

  • Ubuntu 기본값 swappiness=60은 데스크탑 기준, 서버는 10이 적합
  • swapoff -a && swapon -a로 기존 Swap 데이터를 RAM으로 즉시 이동 가능
  • 한 줄 설정으로 전반적인 시스템 응답성 개선

다음 편에서는 Portainer 대신 Spring Boot + React로 직접 만든 컨테이너 대시보드를 다룬다. SSE를 이용한 실시간 로그 스트리밍이 핵심이다.