개발노트

고즐의 개발 및 서버 개발 노트

Rocky Linux 서버에서 PHP + MariaDB 성능 튜닝 실전 가이드

# Rocky # Linux # 튜닝 # PHP-FPM # MariaDB

Server 2025.11.24 34 회 읽음
Server 10일 전 34 회 읽음



Rocky Linux 서버에서 PHP + MariaDB 성능 튜닝 실전 가이드

Rocky Linux 서버에서 PHP와 MariaDB를 함께 운용할 때는 기본 설치만으로도 동작은 하지만, 적절한 튜닝을 해주지 않으면 트래픽이 조금만 늘어나도 느려지거나 장애가 발생하기 쉽습니다. 이 문서는 PHP 설정, PHP-FPM 프로세스 관리, MariaDB InnoDB 버퍼 풀 및 연결 수 등 실제로 체감 성능에 영향을 주는 핵심 튜닝값만 정리한 가이드입니다.


1. PHP 기본 튜닝: php.ini 설정

1-1. php.ini에서 조정해야 할 핵심 항목

php.ini는 PHP의 전반적인 동작 방식을 제어하는 설정 파일입니다. 메모리 제한, 실행 시간, 업로드 용량, 타임존, OPcache 등은 웹서비스 성능과 직결되는 부분이므로 반드시 점검해야 합니다.

memory_limit = 512M
max_execution_time = 120
max_input_time = 120
post_max_size = 64M
upload_max_filesize = 64M

; 한국 시간대 설정
date.timezone = Asia/Seoul

; OPcache 가속기 설정
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 60
opcache.validate_timestamps = 1

; 보안 관련
expose_php = Off
session.cookie_httponly = 1
session.use_strict_mode = 1

위 설정은 일반적인 PHP 기반 웹사이트·ERP·대시보드 환경에서 안정적으로 사용할 수 있는 값입니다. OPcache를 활성화하면 PHP 코드를 매 요청마다 다시 파싱하지 않고 캐시를 활용하므로 응답 속도가 눈에 띄게 빨라집니다.


2. PHP-FPM 프로세스 관리 튜닝

2-1. PHP-FPM 풀 설정 파일 위치와 기본 개념

PHP-FPM은 PHP 요청을 처리하는 별도의 프로세스 풀(pool)을 운영하는 방식입니다. 요청량에 비해 프로세스가 너무 적으면 대기가 길어지고, 너무 많으면 메모리가 부족해져 서버가 불안정해집니다. 주요 설정은 www.conf에서 조정합니다.

vi /etc/php-fpm.d/www.conf


2-2. 소규모·일반 사이트용: ondemand 모드

트래픽이 크지 않고, 여러 사이트를 가볍게 운영하는 환경이라면 ondemand 모드가 메모리 절약에 유리합니다.

pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 60s
pm.max_requests = 500

요청이 없을 때는 프로세스를 자동으로 줄이고, 트래픽이 생기면 필요한 만큼만 생성합니다. 메모리 여유가 크지 않은 VPS·가상서버에서도 효율적으로 사용할 수 있는 방식입니다.


2-3. 트래픽 많은 서비스용: dynamic 모드

API 서버나 방문자가 많은 서비스라면 dynamic 모드로 고정된 수의 프로세스를 유지하며 빠르게 요청을 처리하도록 구성하는 것이 좋습니다.

pm = dynamic
pm.max_children = 80
pm.start_servers = 8
pm.min_spare_servers = 8
pm.max_spare_servers = 20
pm.max_requests = 500

max_children은 동시에 처리 가능한 최대 요청 수에 가까운 값으로 설정해야 합니다. 너무 작으면 대기열이 길어지고, 너무 크면 메모리 부족 문제가 발생할 수 있으니 서버 RAM과 실제 트래픽을 고려해 조정합니다.


3. MariaDB 기본 성능 튜닝: InnoDB 중심

3-1. 설정 파일 위치와 InnoDB 기본 옵션

MariaDB는 대부분 InnoDB 스토리지 엔진을 사용합니다. InnoDB 버퍼 풀, 로그 파일 크기, 플러시 방식 등은 성능에 직접적인 영향을 미치므로 반드시 조정해야 합니다.

vi /etc/my.cnf.d/server.cnf
; 또는
vi /etc/my.cnf

아래는 8GB RAM 서버를 기준으로 한 실전 예시 설정입니다.

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 기본 버퍼 설정
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_log_buffer_size = 32M

# InnoDB 성능 관련
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1

# 스레드 및 테이블 캐시
thread_cache_size = 100
table_open_cache = 4096
max_connections = 200

# Query Cache 비활성화 (MariaDB 10.x에서는 비권장)
query_cache_type = 0
query_cache_size = 0

# Slow Query 로그
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1

innodb_buffer_pool_size는 InnoDB 데이터와 인덱스를 캐싱하는 영역으로, 전체 RAM의 약 1/3 정도를 배정하는 것이 일반적인 기준입니다. query_cache는 최신 버전에서는 오히려 병목이 되기 쉬워 비활성화하는 것을 권장합니다.


4. RAM 용량별 권장 버퍼 값

4-1. 서버 메모리 크기에 따른 추천값

MariaDB 설정은 서버 메모리 용량에 맞추어 조정해야 합니다. 아래는 단일 DB 서버 또는 웹·DB 겸용 서버에서 사용할 수 있는 대략적인 가이드입니다.

# 4GB RAM 서버
innodb_buffer_pool_size = 1G
max_connections = 150

# 8GB RAM 서버
innodb_buffer_pool_size = 2G
max_connections = 200

# 16GB RAM 서버
innodb_buffer_pool_size = 4G
max_connections = 300

버퍼 풀을 너무 크게 잡으면 OS와 다른 프로세스가 사용할 메모리가 부족해져 스왑이 발생할 수 있으므로 여유를 두는 것이 중요합니다.


5. 성능 분석을 위한 Slow Query 로그와 인덱스 점검

5-1. Slow Query 로그로 병목 쿼리 찾기

DB가 느려졌을 때 단순히 버퍼만 키우는 것으로는 한계가 있습니다. 실제로 오래 걸리는 쿼리를 찾아서 인덱스를 추가하거나 쿼리 구조를 개선하는 것이 근본적인 해결책입니다.

slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1

long_query_time을 1초 정도로 맞추면 실제 서비스에서 체감될 수 있는 느린 쿼리들을 쉽게 찾을 수 있습니다.


5-2. 인덱스 및 실행계획 확인

해당 쿼리가 적절한 인덱스를 사용하고 있는지 확인하려면 EXPLAIN을 활용합니다.

SHOW INDEX FROM 테이블명;
EXPLAIN SELECT * FROM 테이블명 WHERE 컬럼 = '값';

type, key, rows 등의 항목을 확인하여 풀 스캔 여부와 인덱스 사용 상황을 점검하고, 필요 시 추가 인덱스를 생성해야 합니다.


6. PHP + MariaDB 튜닝 요약 체크리스트

6-1. 실제 운영 환경에 바로 적용 가능한 설정 모음

아래 항목들은 Rocky Linux 기반 PHP + MariaDB 웹서버에서 체감 성능을 크게 개선해 주는 핵심 튜닝 포인트입니다.

# PHP 설정
memory_limit, max_execution_time, post_max_size, upload_max_filesize 조정
date.timezone = Asia/Seoul
OPcache 활성화 및 opcache.memory_consumption, max_accelerated_files 최적화

# PHP-FPM
pm = ondemand 또는 dynamic 선택
pm.max_children, start_servers, max_spare_servers 값을 트래픽에 맞게 조정

# MariaDB
innodb_buffer_pool_size = RAM의 약 1/3
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
max_connections = 서버 규모에 맞게 설정
query_cache_type = 0 (비활성화)
slow_query_log로 느린 쿼리 확인 및 인덱스 튜닝

위 설정을 기반으로 서비스 특성과 트래픽 패턴에 맞게 수치를 조금씩 조정해 나가면, Rocky Linux 서버에서 PHP와 MariaDB를 사용하는 대부분의 웹서비스에서 안정적인 성능과 충분한 처리량을 확보할 수 있습니다.