Extra Form
PHP PHP 7.4
CMS Rhymix 2.1

카페24 가상서버 메모리 2G 상품에 우분투 22.04 NGINX PHP7.4  MYSQL 설치하고 라이믹스를 설치 했습니다.

 

소규모 커뮤니티 성 홈페이지는 처음 시작하는 상태라 방문자 0인 상태이구요. 이 상황에 맞는 PHP.ini 적정 설정값을 쳇 gpt 에게 물어보니 아래와 같은 답변을 받았는데요. 라이믹스 환경에서도 아래 값들이 적절한 값에 해당 될지 조언 부탁드립니다.

 

2GB 메모리 서버에 적절한 설정값 제안

서버 메모리 2GB를 고려했을 때, 메모리와 디스크 자원을 효율적으로 사용할 수 있도록 설정값을 최적화하는 것이 중요합니다.

session.auto_start : 0
→ 그대로 두는 것이 좋습니다. 세션을 필요할 때 수동으로 시작하는 것이 자원을 절약하는 방법입니다.

session.gc_maxlifetime : 3600
→ 세션 유효 기간을 줄이는 것이 메모리 절약에 도움이 됩니다. 세션 만료 시간을 1시간(3600초)으로 설정하는 것을 추천합니다.

session.save_handler : files
→ 파일 시스템을 사용한 세션 관리는 서버 메모리 사용량이 낮기 때문에 그대로 유지해도 괜찮습니다. 하지만 서버에 Redis 또는 Memcached와 같은 메모리 기반 캐시가 설정되어 있다면, 이를 이용하는 것이 성능에 더 좋습니다.

max_file_uploads : 10
→ 한 번에 업로드할 수 있는 파일 개수를 10개로 줄이는 것을 추천합니다. 이는 서버의 처리 부담을 줄이고 메모리 자원을 아낄 수 있습니다.

memory_limit : 128M
→ 메모리 제한을 128MB로 줄이는 것이 좋습니다. 너무 많은 메모리를 허용하면 서버 메모리 2GB 내에서 다른 프로세스와 충돌할 수 있으므로 적당한 메모리 한도를 설정해야 합니다.

post_max_size : 64M
→ POST 요청 크기를 64MB로 줄이면, 큰 파일이나 데이터가 전송되었을 때 서버 메모리와 디스크 사용량을 줄이는 데 도움이 됩니다.

upload_max_filesize : 50M
→ 개별 파일 업로드 크기를 50MB로 줄이는 것이 좋습니다. 이는 대용량 파일 업로드로 인한 서버 자원 낭비를 방지할 수 있습니다.

 

  • Lv16

    https://rhymix.org/manual/introduction/requirements 문서도 참고하시면 좋습니다.

    session.auto_start -> off(혹은 0)로 되어 있어야 라이믹스 설치 및 사용이 가능합니다.
    session.gc_maxlifetime -> 로그인이 한시간 이상 유지되지 않는 것을 바라시면 변경하시면 됩니다(100% 한시간이 지났을때 로그인이 풀리지는 않지만 가능성이 높아짐)
    session.save_handler -> 설명이 맞습니다(redis나 memcached를 설치하신게 아니라면 그냥 두세요)

    max_file_uploads -> 라이믹스와 무관한 설정이지만(파일 하나씩, 용량이 크면 분할 전송하는게 기본) 줄이거나 늘려도 서버 성능과는 무관합니다. 단 확장변수를 통해 업로드를 구현하는 자료(스티커 모듈이 대표적인 예)는 이 제한값을 적용받습니다.
    memory_limit -> 라이믹스 구동에 필요한 최소 수치는 128MB입니다.
    post_max_size, upload_max_filesize -> post_max_size가 upload_max_filesize보다 크며 memory_limit보다는 작으면 됩니다.(memory_limit > post_max_size > upload_max_filesize 로 upload_max_filesize 값이 제일 작아야 함)

    라이믹스는 분할 업로드를 지원하므로 upload_max_filesize가 10MB 이상이기만 하면 업로드 가능 크기에 제한은 없습니다. 너무 줄여놓아도 문제가 되므로 챗GPT가 추천한 값을 그대로 사용해도 무방합니다.

  • Lv16 ? Lv7
    랑크 부분과 상세한 답변 감사드립니다. ^^
  • Lv36

    메모리가 부족하다면 제일 중요한 설정은 php-fpm pool 파일에 있는 pm.max_children입니다. memory_limit × pm.max_children 만큼의 메모리를 필요로 하기 때문에, memory_limit이 낮더라도 pm.max_children이 높으면 메모리가 초과될 수 있습니다.

     

    MySQL과 그 밖의 프로그램들을 위해 서버 전체 메모리의 절반 정도를 비워놓는다는 가정 하에, PHP가 사용할 수 있는 메모리는 1GB ÷ 128MB = pm.max_children 8을 넘지 않도록 하는 것이 좋겠습니다. memory_limit이 높다면 그만큼 pm.max_children을 낮추어야 하고, memory_limit이 낮다면 그만큼 pm.max_children을 높여도 됩니다.

     

    서버를 운영하다 보면 pm.max_children을 늘려달라는 에러 메시지가 로그파일에 주구장창 찍힙니다. 다른 프로그램을 배려하지 않고 메모리를 독차지하려는 PHP의 욕심이니, 쿨하게 무시하셔도 됩니다.

     

    그 밖에 챗GPT가 추천해준 것들은 해도 그만, 안해도 그만입니다. 극단적으로 이상한 값을 넣지만 않으면 서버 성능에 별 영향을 주지 않는 마이너한 설정들이니까요.

  • Lv36 ? Lv7
    상세한 답변 감사드립니다. ^^
    조언 주신 내용을 천천히 읽어보고 적용해 보도록 하겠습니다.
  • Lv36 ? Lv7

    memory_limit이 높다면 그만큼 pm.max_children을 낮추어야 하고, memory_limit이 낮다면 그만큼 pm.max_children을 높여도 됩니다.

     

    ---> /etc/php/7.4/fpm/pool.d/www.conf 내용 중 말씀 해 주신 pm.max_children 값이  5로 기본 설정이 되어 있는데요.

     

    memory_limit ( 128M ) x pm.max_children ( 5 ) = 640M

    이 경우 현재 설정상태 그대로 두는게 좋을 지 아니면 혹시 서버 메모리 절반인 1G 근접하게 수치를 높이는게 더 효율적이라면 memory_limit 수치 또는  pm.max_children 8이하인 수준에서  2개 중 어떤 것을 높이는게 일반적인 방법일까요?

     

    111.JPEG

  • ? Lv7 Lv36
    현재 성능에 문제가 없다면 굳이 높여서 꽉 채울 필요는 없습니다.
  • Lv36 ? Lv7
    답변 감사합니다.
  • Lv9
    추천은 아니고 제 개인적으로는,

    memory_limit : 256M
    이 적합하더군요. 메모리 리밋은 여러 테스트를 해봤었는데 128은 약간 부족하더라구요.

    session.gc_maxlifetime : 7200
    장문의 글을 오래 쓰다보면 로그인이 풀려버리는 경우가 있어서 7200이 적합하더라구요. 물론 사용자 숫자와 사이트 특성에 따라 조절하셔야 하니 정답은 없구요.
  • Lv9 ? Lv7
    답변 감사합니다.
  • Lv9 Lv36

    요즘 폰카 화소수가 많이 늘어나서 128M로는 썸네일 생성이 안 될 때가 종종 있지요. 그렇다고 memory_limit을 넉넉하게 주자니 서버 램도 높여야 하고... 결국 평균적인 스마트폰보다 램이 적은 서버로는 만족스러운 커뮤니티 운영이 어렵다는 얘기가 나오는 이유가 있습니다.^^

    세션 유지 시간은 요즘 거의 무제한에 가깝게 늘려놓기도 합니다. 브라우저 보안정책 개선과 SSL의 광범위한 보급으로 세션 탈취가 예전보다 훨씬 힘들어지기도 했고, 특히 모바일에서는 오늘이고 내일이고 항상 로그인되어 있는 것이 평균적인 기대치가 되었으니까요. 물론 세션 유지 시간이 짧더라도 자동 로그인 기능을 활용하면 큰 불편은 없습니다.^^