피크타임인 밤 12시만 되면 서버가 502에러가 뜨면서 죽어버립니다.

2017/12/05 00:00:10 [error] 1408#1408: *3146517 connect() to unix:/run/php/php7.0-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 162.158.XXX.XXX, server: www.example.com, request: "GET /bbs/board.php?bo_table=example1&wr_id=1159&page=17 HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "www.example.com", referrer: "https://www.example.com/bbs/board.php?bo_table=example1&page=16&page=17"

NginX 에러 로그는 위와 같습니다,[이후 모든 에러로그 동일]

php-fpm 로그는 서버 에러 난 시각부터 기록되지도 않았습니다.[아마 php-fpm이 다운되서 그런걸로 추정]

MySQL 로그는 아예 로그 기록 설정을 안해놔서 로그가 기록되지 않았습니다.

대체 뭐가 문제인지 모르겠습니다 ㅠ.ㅠ

 

  • profile

    출석부가 문제 아닐까요? XE타운도 12시만 되면 출석부 때문에 사이트가 매우 느려집니다.

  • profile ?
    대략 php-fpm 설정은 이렇습니다.
    www.conf
    [www]
    user = www-data
    group = www-data
    listen = /run/php/example1.sock
    listen.owner = www-data
    listen.group = www-data
    pm = dynamic
    pm.max_children = 350
    pm.start_servers = 18
    pm.min_spare_servers = 13
    pm.max_spare_servers = 100
  • profile ?
    출석 문제는 아닌것 같아요, 확인해보니 출석하신 분이 두분이어서요.
  • ? profile
    다운돼서 출석 못한 거 아닌가요?
  • profile ?
    그건 아닌것 같아요. 502에러 뜨기 전에도 피크타임때 출석률은 xe타운만큼은 아니네요
    많아봤자 10분당 6명이 출석한 정도에요.
  • ? profile

    pm.max_children = 350 ㄷㄷㄷ

    혹시 CPU가 한 50코어쯤 되고 RAM도 한 50GB쯤 되시나요? 그렇지 않다면 확 줄이세요.
    CPU 코어수의 6~8배, RAM 용량(GB)의 8배 (DB도 돌린다면 4~6배) 중 적은 쪽이 적정값입니다.
    대부분의 서버에서는 이 설정값이 두 자리 숫자를 넘어가면 안됩니다.

    이 설정값이 너무 높으면 php-fpm 혼자 서버 자원을 다 쓰고 뻗어버립니다.

     

    서버 운영에서 제일 중요한 것이 DB 튜닝이고

    두 번째가 아파치 MaxRequestWorkers 또는 php-fpm 프로세스 숫자 튜닝입니다.

    참고로 피크시간대 동접수가 1만 명에 육박하는 대규모 사이트도

    pm.max_children = 100 내외로 운영하고 있습니다.

    물론 위의 내용은 제일 먼저 눈에 띈 문제일 뿐, 그게 원인은 아닐 수도 있습니다.
    에러 로그와 슬로우 로그가 있어야 추측이라도 해보지요.
    sysctl.conf에서 net.core.somaxconn 값이 너무 낮아서 소켓 연결이 안 되고 있을 가능성도 있고,

    너무 느린 쿼리나 DB단의 lock 때문에 350개의 프로세스 모두 먹통이 되어 있을 수도 있습니다.

  • profile ?
    pm.max_children외에 따로 손봐줘야 될건 없는거죠?
    평균동접은 600명정도이고 피크타임때 동접이 1200입니다.
  • profile ?
    기진곰님 항상 도움줘서 정말 감사합니다.
    서버 문제로 여러가지 일이 생겼을때 기진곰님이 정말 큰 힘이 됐습니다
    주무셔야할 새벽녁에도 덧글 달아주셔서 정말 감사합니다.
  • ? profile
    pm.max_children은 올려주신 내용에서 제일 먼저 눈에 띈 문제일 뿐, 그게 원인은 아닐 수도 있습니다. 로그 기록을 해야 뭐가 문제인지 알죠...
  • profile ?
    SQL 로그 말씀하시는건가요?
    참고로 php-fpm 로그는 다운되기 시작할때부터 기록되지 않았어요
  • ? profile
    MySQL(MariaDB)에도 슬로우 로그가 있고, php-fpm도 슬로우 로그 기능이 있습니다.
    몇 초 이상 걸리는 쿼리나 요청은 모두 로그에 기록해서
    어느 모듈, 애드온이 문제인지 찾는 거예요.
  • profile ?
    안녕하세요, 기진곰님.
    pm.max_children 비율을 100이하로 낮추니 502 오류가 뜹니다.
    그래서 지금은 110으로 설정 해놨습니다.
    pm.start_servers = 18
    pm.min_spare_servers = 13
    pm.max_spare_servers = 100
    위 세가지 값도 바꿔줘야 하나요?
  • profile ?
    아.. 전 그누보드5 아미나 빌더를 사용하고 있습니다.
    답변주셔서 감사합니다.
  • ? profile
    낮아도 502가 뜨고 높아도 502가 뜬다면 진짜 원인은 다른 데 있겠지요...

    pm.start_servers = pm.max_children의 절반 정도
    pm.min_spare_servers = pm.start_servers와 같은 값
    pm.max_spare_servers = pm.max_children과 같은 값
    이렇게 생각하시면 편합니다.
    이 세 가지 설정은 완전 엉뚱한 값으로 해놓지만 않으면
    성능이나 안정성에 큰 영향을 미치지 않습니다.
  • profile ?
    기진곰님 위와 같이 서버세팅을 잘하려면 어떤걸 익혀야 하는지 궁금합니다.
    알려주시면 감사하겠습니다.
  • ? profile

    그냥 많이 해봐야죠...... 인터넷상에 제대로 된 매뉴얼도 찾기 힘들고요.

    그누보드라면 XE 출석부와는 무관하겠지만, 빌더에서 제공하는 간단한 기능이나 SIR 홈페이지에 돌아다니는 코드들 중에도 성능이 아주 안 좋은 것들이 많습니다. XE 애드온도 마찬가지예요. 이런 거 만들어서 뿌리는 분들 중 상당수가 동접수가 1에 수렴하는ㅡ.ㅡ 개인 홈페이지에서 테스트해보고 겨우 에러만 안 나는 상태로 내놓기 때문에 실제로 사용자가 많은 사이트에 가져가면 뒤집어지기 십상이지요. 메뉴에 새 글 표시를 하거나 글 제목 옆에 모바일 작성 아이콘을 넣거나 회원 닉네임 옆에 레벨을 표시하는 등 지극히 평범한 기능들도 어떻게 구현하는지에 따라 100배 이상 성능 차이가 발생할 수 있습니다.

    어디가 느린지 찾아내서 고치려면 본격 탐정놀이를 해봐야 합니다. 일단 위에서 말씀드린 php-fpm 슬로우 로그와 MySQL 슬로우 로그부터 켜세요. php-fpm 슬로우 로그는 5~10초, MySQL 슬로우 로그는 1초 이상 걸리는 쿼리를 모두 기록하도록 해두고, 상습적으로 잡히는 함수나 쿼리는 모두 용의자로 취급하셔야 합니다.