안녕하세요.
NGINX UBUNTU PHP-FPM MARIADB를 이용해 웹사이트를 운영하고 있습니다.
구글링을 통해 수많은 가이드를 보면서 따라해보았습니다만, 늘 램에 관해 이해가 잘 안됩니다.
예를들면 PHP, Nginx , Mariadb 등 각각의 프로세스가 점유하는 메모리가 있고, 캐쉬(Opcache, Fastcgi)마다도 각각 램을 설정할 수 있는데요..
1) 만약 램이 2기가라고 가정했을때 이 모든 램을 더해서 2기가 이내로 설정해야되는건가요?
2) 예를들어 PHP에서의 memory_limit = 128m opcache의 opcache.memory_consumption = 128mb, 이라고 하면 php에서 256mb를 차지하는건가요?
3) Mysql에서는 수 많은 캐쉬 설정 (tmp_table_size, query_cache_size, innodb...) 있는데, 이걸 어떻게 나눠줘야되는건지요? mysqltuner로 돌려보았지만 계속해서 증가 > 시키라는 조언만 나오더군요..
4) 메모리는 어떤 프로세스에 많이 지정해주는게 속도에 가장 영향을 많이 미치나요? php에 줘야되는지 db에 줘야되는지 모르겠습니다.
답변 기다리겠습니다. 감사합니다.
1. 네.
2. (PHP 프로세스 갯수 × memory_limit) + opcache.memory_consumption + 기본메모리 수십MB 정도입니다. PHP 프로세스 갯수는 PHP-FPM pool의 pm.max_children 설정에 좌우됩니다. 비교적 최근 버전의 우분투 기준으로 아마 기본값이 5일 거예요. 이 때 PHP에서 사용할 수 있는 RAM의 이론적 최대치는 (5 × 128) + 128 + 수십MB = 800MB 정도가 됩니다. 물론 이론상 최대치이기 때문에 5명이 동시에 큰 사진을 업로드하고 썸네일을 생성하는 짓거리를 하지 않는다면 실제로 그렇게 많이 사용하지는 않겠지만, 어느 날 갑자기 서버 터질 수도 있어요.
3. MariaDB는 각종 버퍼와 캐시가 워낙 많아서 쉽게 계산하기 어렵지만, 대략 innodb_buffer_pool_size + 500~1000MB 정도 차지한다고 생각하시면 됩니다. mysqltuner가 자꾸 더 늘리라고 한다면 더 늘려야지요. 더 늘리기에는 서버에 RAM이 부족하겠다 싶으면 RAM을 늘려야지요. DB에 RAM을 100기가 넘게 주는 서버도 있습니다;;;
4. MariaDB에 충분한 RAM을 할당해주는 것이 가장 중요합니다. 그렇다고 PHP 쪽을 줄일 수는 없습니다. 128MB 밑으로 내려가면 XE나 워드프레스 등 대부분의 CMS가 정상 작동하지 않고, pm.max_children을 줄이면 동시에 처리할 수 있는 접속자 수가 깎여 버리고, opcache도 성능과 직결되어 있으니까요.
그래서 서버를 제대로 쓰려면 최소 4기가의 RAM이 필요하다고 하는 거예요.