NAS를 제자리에 놓고 나니 다른 생각이 들었습니다. 이 기계, 파일만 담아두기엔 아깝다는 생각이요.
이미 블로그를 하나 돌리고 있었습니다. 워드프레스를 도커로 올려서 쓰고 있었는데, 하나를 더 만들고 싶어졌습니다. 주제가 다른 블로그를 따로 굴리고 싶었거든요.
그래서 먼저 물어봤습니다. 이 NAS가 블로그를 두 개 감당할 수 있나?
결론부터 말씀드리면 가능했습니다. 다만 병목은 제가 예상한 곳이 아니었고, 범인도 엉뚱한 데 있었습니다.
CPU를 걱정했는데 문제가 아니었습니다
처음엔 CPU를 걱정했습니다. 제 NAS는 저전력 셀러론을 쓰는 보급형이라 웹서버 두 개를 돌리면 버거울 것 같았습니다.
재보니 아니었습니다. 4코어 중 실제 CPU 사용은 한참 여유가 있었습니다. 부하가 걸린 항목은 CPU가 아니라 디스크 입출력 대기였고, 그마저도 심각한 수준은 아니었습니다.
진짜 문제는 메모리였습니다.
여유 메모리보다 스왑을 봐야 합니다
메모리를 확인했을 때 여유가 약 410MB였습니다. 전체가 1.7GB 남짓이니 넉넉하진 않아도 못 쓸 정도는 아니라고 생각했습니다.
그런데 같은 화면에서 스왑 사용량이 눈에 들어왔습니다. 2GB 중 1.6GB를 이미 쓰고 있었습니다.
스왑은 메모리가 부족할 때 디스크를 메모리처럼 빌려 쓰는 공간입니다. 디스크는 메모리보다 훨씬 느리기 때문에, 스왑을 많이 쓰고 있다는 건 이미 메모리가 모자란 상태를 느린 방식으로 버티고 있다는 뜻입니다.
여기서 판단이 뒤집혔습니다. “지금 트래픽이 적으니 하나 더 올려도 되겠지”가 아니라, “지금도 이미 빠듯한 상태”였던 겁니다.
범인은 워드프레스가 아니었습니다
그다음은 누가 메모리를 쓰고 있는지 확인할 차례였습니다. SSH로 접속해 메모리를 많이 쓰는 순서대로 프로세스를 나열했습니다.
ps aux --sort=-%mem | head -20
1등이 워드프레스일 거라 생각했습니다. 아니었습니다.
가장 많이 쓰고 있던 건 파일 동기화 앱 하나였습니다. 혼자서 약 390MB, 전체 메모리의 22%를 쓰고 있었습니다. 예전에 설치해두고 거의 쓰지 않던 앱이었습니다.
워드프레스 쪽은 아파치 워커들이 합쳐서 400~500MB 정도였고, 데이터베이스는 30MB 남짓으로 오히려 가벼웠습니다.
안 쓰는 앱 하나가 블로그 전체보다 비슷하게 먹고 있었던 셈입니다.
끄고 나니 두 배가 됐습니다
패키지 센터에서 그 앱을 정지했습니다. 결과가 이랬습니다.
| 항목 | 정지 전 | 정지 후 |
|---|---|---|
| 여유 메모리 | 약 410MB | 약 746MB |
| 스왑 여유 | 약 484MB | 약 765MB |
| 해당 앱 프로세스 | 약 390MB 사용 | 사라짐 |
여유 메모리가 거의 두 배가 됐습니다. 새 워드프레스 스택 하나를 올리는 데 드는 메모리가 대략 250~450MB이니, 이제 올려도 되는 상태가 됐습니다.
한 가지 주의할 게 있습니다. 앱 안에서 동기화를 멈추는 것과 패키지 자체를 정지하는 것은 다릅니다. 저도 처음엔 앱 설정에서 껐는데, 프로세스는 그대로 살아서 200MB를 계속 쓰고 있었습니다. 패키지 센터에서 정지해야 완전히 내려갑니다.
블로그를 올리기 전에 재보는 순서
같은 고민을 하고 계시다면 이 순서로 확인해 보시기 바랍니다. SSH가 익숙하지 않으시면 DSM의 리소스 모니터에서도 대부분 볼 수 있습니다.
- 여유 메모리와 스왑을 같이 봅니다. 여유만 보면 착각합니다. 스왑을 많이 쓰고 있으면 이미 부족한 상태입니다.
- 메모리를 많이 쓰는 프로세스를 나열합니다. 안 쓰는 앱이 상위에 있는 경우가 흔합니다.
- 안 쓰는 패키지를 정지합니다. 앱 설정이 아니라 패키지 센터에서 정지해야 합니다.
- 다시 재봅니다. 프로세스가 실제로 사라졌는지 확인합니다.
CPU는 생각보다 여유가 있는 경우가 많습니다. 보급형 NAS에서 먼저 막히는 건 대체로 메모리입니다.
정리
- 블로그를 하나 더 올리기 전에 리소스부터 재보시기 바랍니다.
- 여유 메모리만 보지 말고 스왑 사용량을 같이 보십시오. 스왑을 많이 쓰면 이미 모자란 겁니다.
- 메모리를 가장 많이 쓰는 게 정작 안 쓰는 앱인 경우가 흔합니다.
- 앱 안에서 끄는 것과 패키지를 정지하는 것은 다릅니다. 정지 후 프로세스가 실제로 사라졌는지 확인하십시오.
- 워드프레스 스택 하나를 올리는 데 드는 메모리는 대략 250~450MB로 보시면 됩니다.
다음 편에서는 실제로 두 번째 워드프레스를 어떻게 분리해 올렸는지 적겠습니다.
NAS 복구·재구축 연재 — 전 11편 중 7편
1막 · 잃음
2막 · 다시 지음
3막 · 그 위에 블로그를 올림
- 나스 한 대로 블로그 두 개, 병목은 CPU가 아니었습니다 — 지금 읽는 글
- 도커로 워드프레스 스택 분리하기, 멀티사이트를 안 쓴 이유
- MariaDB가 Permission denied로 죽는다, 시놀로지 ACL 함정
- 포트포워딩 없이 도메인 붙이기, 관리자 화면은 숨기기
- 같은 일을 두 번 겪지 않으려고, RAID는 백업이 아닙니다