<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Swap on Chanyeol Dev</title>
    <link>https://chanyeols.com/tags/swap/</link>
    <description>Recent content in Swap on Chanyeol Dev</description>
    <generator>Hugo</generator>
    <language>ko-kr</language>
    <lastBuildDate>Thu, 02 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://chanyeols.com/tags/swap/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>노트북으로 홈서버 구축하기 - TLP &#43; thinkfan &#43; Swap 튜닝으로 운영 최적화 (11편)</title>
      <link>https://chanyeols.com/posts/part-11-tuning/</link>
      <pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://chanyeols.com/posts/part-11-tuning/</guid>
      <description>24시간 돌아가는 홈서버의 CPU 온도를 85°C에서 55°C로 낮추고, swappiness 튜닝으로 불필요한 Swap 사용을 줄인 과정을 정리합니다.</description>
      <content:encoded><![CDATA[<h2 id="두-가지-문제">두 가지 문제</h2>
<p>홈서버를 며칠 돌려보니 두 가지가 눈에 띄었다.</p>
<ol>
<li>Immich 썸네일 생성 같은 작업이 걸리면 <strong>CPU 온도가 85°C까지 치솟는다</strong>. 24시간 켜두는 서버라 장기적으로 하드웨어에 좋지 않다.</li>
<li>Grafana 대시보드를 보니 <strong>RAM 사용률이 38%인데 Swap을 26%나 사용</strong>하고 있었다. RAM이 절반도 안 찼는데 Swap을 쓰는 건 비정상이다.</li>
</ol>
<p>두 문제를 각각 TLP + thinkfan, swappiness 튜닝으로 해결했다.</p>
<hr>
<h2 id="1부-tlp--thinkfan으로-온도-낮추기">1부: TLP + thinkfan으로 온도 낮추기</h2>
<h3 id="tlp-설치">TLP 설치</h3>
<p>TLP는 Linux용 전력 관리 도구다. 설치만 해도 기본값으로 어느 정도 효과가 있고, ThinkPad에 맞게 튜닝하면 훨씬 효과적이다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install tlp tlp-rdw -y
</span></span><span style="display:flex;"><span>sudo tlp start
</span></span></code></pre></div><p>설치 확인:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo tlp-stat -s
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>--- TLP 1.6.1 --------------------------------------------
</span></span><span style="display:flex;"><span>+++ TLP Status
</span></span><span style="display:flex;"><span>State          = enabled
</span></span><span style="display:flex;"><span>Mode           = AC
</span></span><span style="display:flex;"><span>Power source   = AC
</span></span></code></pre></div><h3 id="tlp-튜닝">TLP 튜닝</h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/tlp.conf
</span></span></code></pre></div><p>아래 항목을 찾아서 주석 해제 후 값을 수정한다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>CPU_SCALING_GOVERNOR_ON_AC=powersave
</span></span><span style="display:flex;"><span>CPU_ENERGY_PERF_POLICY_ON_AC=balance_power
</span></span><span style="display:flex;"><span>CPU_BOOST_ON_AC=0
</span></span><span style="display:flex;"><span>PLATFORM_PROFILE_ON_AC=balanced
</span></span></code></pre></div><p><strong>핵심은 <code>CPU_BOOST_ON_AC=0</code>이다.</strong> 터보 부스트를 끄는 것만으로도 온도가 10~20°C 내려간다. 홈서버 용도에서는 최대 성능이 필요한 순간이 거의 없기 때문에 체감 성능 저하도 없다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo tlp start
</span></span></code></pre></div><h3 id="thinkfan-설치">thinkfan 설치</h3>
<p>thinkfan은 온도 구간별로 팬 속도를 직접 제어하는 도구다. ThinkPad 기본 팬 제어보다 세밀하게 조절할 수 있다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install thinkfan -y
</span></span></code></pre></div><p>thinkpad_acpi 팬 제어 권한 활성화:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#34;options thinkpad_acpi fan_control=1&#34;</span> | sudo tee /etc/modprobe.d/thinkpad_acpi.conf
</span></span><span style="display:flex;"><span>sudo modprobe -r thinkpad_acpi
</span></span><span style="display:flex;"><span>sudo modprobe thinkpad_acpi <span style="color:#79c0ff">fan_control</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">1</span>
</span></span></code></pre></div><p>센서 경로 확인:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>find /sys/devices -name <span style="color:#a5d6ff">&#34;temp*_input&#34;</span> 2&gt;/dev/null
</span></span></code></pre></div><p>ThinkPad CPU 온도 센서는 보통 아래 경로에 있다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/temp1_input
</span></span></code></pre></div><p><code>hwmon</code> 뒤의 숫자는 환경마다 다를 수 있으니 직접 확인하자.</p>
<h3 id="thinkfan-설정">thinkfan 설정</h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/thinkfan.conf
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#7ee787">sensors</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- <span style="color:#7ee787">hwmon</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/temp1_input</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#7ee787">fans</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- <span style="color:#7ee787">tpacpi</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">/proc/acpi/ibm/fan</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#7ee787">levels</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">0</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">0</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">55</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">1</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">50</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">60</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">2</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">55</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">65</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">3</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">60</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">70</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">4</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">65</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">75</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">5</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">70</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">80</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- [<span style="color:#a5d6ff">7</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">75</span>,<span style="color:#6e7681"> </span><span style="color:#a5d6ff">255</span>]<span style="color:#6e7681">
</span></span></span></code></pre></div><table>
  <thead>
      <tr>
          <th>레벨</th>
          <th>온도 구간</th>
          <th>동작</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>~55°C</td>
          <td>팬 정지</td>
      </tr>
      <tr>
          <td>1</td>
          <td>50~60°C</td>
          <td>최저속</td>
      </tr>
      <tr>
          <td>2</td>
          <td>55~65°C</td>
          <td>저속</td>
      </tr>
      <tr>
          <td>3</td>
          <td>60~70°C</td>
          <td>중저속</td>
      </tr>
      <tr>
          <td>4</td>
          <td>65~75°C</td>
          <td>중속</td>
      </tr>
      <tr>
          <td>5</td>
          <td>70~80°C</td>
          <td>고속</td>
      </tr>
      <tr>
          <td>7</td>
          <td>75°C~</td>
          <td>최대속</td>
      </tr>
  </tbody>
</table>
<p>서비스 시작:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl enable thinkfan
</span></span><span style="display:flex;"><span>sudo systemctl start thinkfan
</span></span><span style="display:flex;"><span>sudo systemctl status thinkfan
</span></span></code></pre></div><h3 id="온도-개선-결과">온도 개선 결과</h3>
<table>
  <thead>
      <tr>
          <th></th>
          <th>적용 전</th>
          <th>적용 후</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>CPU 온도 (풀로드)</td>
          <td>85°C</td>
          <td>55~66°C</td>
      </tr>
      <tr>
          <td>팬 RPM</td>
          <td>3600 RPM</td>
          <td>1800 RPM</td>
      </tr>
      <tr>
          <td>GPU 온도</td>
          <td>79°C</td>
          <td>48~59°C</td>
      </tr>
  </tbody>
</table>
<p>TLP 터보 부스트 비활성화만으로도 <strong>약 20~30°C</strong> 온도가 내려갔다. 24시간 상시 운영 환경에서는 성능보다 안정성이 중요하기 때문에 이 설정이 최적이다.</p>
<h3 id="부팅-시-자동-적용-확인">부팅 시 자동 적용 확인</h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl is-enabled tlp
</span></span><span style="display:flex;"><span>sudo systemctl is-enabled thinkfan
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># 둘 다 &#34;enabled&#34; 출력되면 정상</span>
</span></span></code></pre></div><hr>
<h2 id="2부-swappiness-튜닝">2부: swappiness 튜닝</h2>
<h3 id="문제-발견">문제 발견</h3>
<p>Grafana 대시보드를 보다가 이상한 걸 발견했다.</p>
<p><img alt="Grafana - RAM 38% 사용 중인데 Swap 26% 사용" loading="lazy" src="/images/homeserver-11-swap-before.png"></p>
<p>RAM 사용률은 37.8%인데 Swap을 26%나 쓰고 있었다. Swap은 SSD를 메모리처럼 쓰는 거라 RAM보다 훨씬 느리다. 불필요하게 Swap을 쓰면 전체 성능이 저하된다.</p>
<h3 id="swappiness란">swappiness란?</h3>
<p><code>vm.swappiness</code>는 커널이 얼마나 적극적으로 Swap을 사용할지 결정하는 값이다.</p>
<table>
  <thead>
      <tr>
          <th>값</th>
          <th>설명</th>
          <th>적합한 환경</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>Swap 거의 사용 안 함</td>
          <td>RAM이 매우 넉넉한 서버</td>
      </tr>
      <tr>
          <td>10</td>
          <td>RAM 거의 다 찰 때만 Swap 사용</td>
          <td>홈서버, 일반 서버</td>
      </tr>
      <tr>
          <td>60</td>
          <td>Ubuntu 기본값</td>
          <td>데스크탑</td>
      </tr>
      <tr>
          <td>100</td>
          <td>적극적으로 Swap 사용</td>
          <td>RAM이 매우 부족한 환경</td>
      </tr>
  </tbody>
</table>
<p>Ubuntu 기본값이 60인데, 홈서버처럼 RAM이 충분한 환경에서는 너무 높다.</p>
<h3 id="튜닝-적용">튜닝 적용</h3>
<p>즉시 적용:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo sysctl vm.swappiness<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">10</span>
</span></span></code></pre></div><p>재부팅 후에도 유지:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#34;vm.swappiness=10&#34;</span> | sudo tee -a /etc/sysctl.conf
</span></span></code></pre></div><p>적용 확인:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat /proc/sys/vm/swappiness
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># 10</span>
</span></span></code></pre></div><p>기존 Swap에 올라간 데이터를 RAM으로 옮겨서 효과를 바로 확인한다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo swapoff -a <span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> sudo swapon -a
</span></span></code></pre></div><h3 id="튜닝-결과">튜닝 결과</h3>
<p><img alt="Grafana - Swap 사용량이 7%대로 감소" loading="lazy" src="/images/homeserver-11-swap-after.png"></p>
<p>기존 26%가량 사용하던 Swap이 7%대로 떨어진 것을 확인할 수 있다.</p>
<hr>
<h2 id="정리">정리</h2>
<p><strong>온도 관리:</strong></p>
<ul>
<li>TLP <code>CPU_BOOST_ON_AC=0</code> 하나로 온도 20~30°C 감소</li>
<li>thinkfan으로 팬 커브를 직접 제어해서 불필요한 소음 줄임</li>
<li>홈서버는 성능보다 안정성이 중요하므로 터보 부스트 끄는 게 최선</li>
</ul>
<p><strong>Swap 튜닝:</strong></p>
<ul>
<li>Ubuntu 기본값 swappiness=60은 데스크탑 기준, 서버는 10이 적합</li>
<li><code>swapoff -a &amp;&amp; swapon -a</code>로 기존 Swap 데이터를 RAM으로 즉시 이동 가능</li>
<li>한 줄 설정으로 전반적인 시스템 응답성 개선</li>
</ul>
<p>다음 편에서는 Portainer 대신 Spring Boot + React로 직접 만든 컨테이너 대시보드를 다룬다. SSE를 이용한 실시간 로그 스트리밍이 핵심이다.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
