apache 로 웹서비스중 페이지 로딩이 안됩니다.
글쓴이: monovision / 작성시간: 일, 2006/08/20 - 6:01오후
현재 웹호스팅 업체에서 알바를 하고 있습니다.
가끔씩 웹페이지 자체가 열리지 않는 현상이 나타나곤 합니다.
프로세스와 시스템 자원상으로는 충분히 여유가 있는데도 페이지가 뜨지 않으며
로그 파일을 살펴보아도 별다른 원인을 찾지 못했습니다.
httpd.conf 설정중에 MaxClients, Timeout, KeepAlive, KeepAliveTimeout, MaxKeepAliveRequests 값등을
조정해봐도 여전히 동일한 현상이 발생합니다.
어디를 살펴봐야 원인 파악 및 해결책을 모색할 수 있을까요 ?
그리고...
다른 서버에서는 특정 사용자의 과도한 쿼리로 인하여 다른 사용자까지 지장을 받고 있는데
특정 사용자의 MySQL 사용량을 제한할 수 있는 방법은 없을까요 ?
Forums:
버전이 좀 된다면
버전이 좀 된다면 연결 갯수 같은 기본적인 사항은 mysql 데이터베이스의 user 테이블에서 설정 가능한 걸로 알고 있습니다.
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
MySQL 버전은 4.0대
MySQL 버전은 4.0대 입니다. 만약 user 테이블에서 연결 갯수와 같은 것들을 제한을 할 수 있다면
어느 정도까지 해야 적당할까요 ?
적당한 수치를 정하기 위해서는 테스트 과정이 필요한데 제가 DB 라고는 기본적은 쿼리문밖에 쓸줄을 모릅니다.
MySQL 모니터링 및 관리에 필요한 자료를 얻을 수 있는 사이트나 책을 알려주시면 감사하겠습니다.
또 하나 궁금한게... 서버 관리툴(cPanel) 로 모니터링 했을때는 다음과 같이 보여줍니다.
MySQL 데몬이 cpu 를 과도하게 점유했을 때(80% 이상 유지될 경우도 있고, 심할때는 순간적으로 90% 가 넘어갈 경우도 있습니다.)
해당 쿼리문을 보면 대부분이 select 문과 update 문이었으며, 쿼리문 자체는 특이한게 없었으나
LOCK 걸린 상태가 많았습니다.
상태가 위와 같을때 혹시 시스템의 다른쪽에 문제가 있어서 그럴 수도 있나요 ? 여타의 프로세스는 정상적인 수준이었습니다.
MySQL 이 cpu 를 80% 이상 사용중일때에도 메모리는 약 40% 이상 여유가 있었습니다. 아, cpu 메모리는 4기가입니다.
cpu 가... 제온이 듀얼로 구성되어 있을껍니다. (아마도 IBM x336 일겁니다.)
덧.
가끔씩 해킹 및 보안, 네트워크 공부를 하느라 리눅스를 쓰긴 하는데 실제 웹호스팅을 할 경우에 이렇게 신경이 쓰일 줄
몰랐습니다. 앞으로 해야할 것이 zb5 용 서버 테스팅, 백업 및 로그 정책, 로그 서버 구축, 시리얼 통신을 통한
vpn 장비 모니터링 프로그램 등등... 해야할 것은 계속 늘어나는데 아득하기만 합니다.
게다가, 업계에서는 꽤 잘 나간다고는 하는데 시스템에 문제가 생겼을 경우에 물어보면 모르쇠로 일관하고 항상 검색을
통해서 문제를 해결하는 것도 슬슬 한계에 도달해 갑니다. ( 특히, 로그 파일에 이상이 없을때 !!! )
신입을 가르칠 매뉴얼도 없고, 문서화가 이루어진 것도 아니고... 인트라넷으로 시켜놓고 나중에 일이 생겼을 때에는 정작
발뺌하는 사람들 때문에 해당 쪽지들을 항상 저장 + 스샷해서 보관하는 나 자신이 간사하게 느껴지기도 하고..
IT 쪽이 다 이렇지는 않겠지만, 그 동안 들었던 안 좋았던 얘기, 소문들이 점점 온몸으로 느껴집니다.
적절한 연결 갯수는
적절한 연결 갯수는 답하기 어려운 문제입니다. ㅡ,.ㅡ
LOCK의 경우 명시적인 LOCK도 있을테고 MyISAM 테이블의 경우 INSERT, UPDATE, DELETE 시에 테이블 LOCK이 자동으로 걸리는 걸로 알고 있습니다. 만일 LOCK의 지속 시간이 길다면 대량의 IO작업이나 메모리 작업이 있을 가능성이 높습니다. show full processlist 같은 명령으로 쿼리를 알아보신후에 직접 돌려 보시면 알 수 있을듯 합니다.
아니면 아예 slow쿼리 로그를 남기셔두 되구요.
시스템이 항상 오버헤드 상태가 아니라면 슬로우 쿼리 로그 정도는 남길수도 있습니다.
이에 따라 적절한 메모리 할당이나 테이블 인덱스를 만들어 주는 식으로 대량의 IO나 메모리 작업을 줄여줘야 할 듯 합니다.
그런데 웹호스팅 업체에서 고객의 어플리케이션 까지 신경을 써야 하다니 좀 복잡한 문제네요.
어쨌든 문제를 해결해야 하는 상황이라면 MySQL 쪽은 그렇게 진행을 하셔야 할 듯 합니다.
/var/log/mysql/slow.log 파일에 4초 이상 실행된 쿼리를 남기는 설정입니다.
단, 4.0 에서도 정확히 돌지는 모르므로 mysql.com 에 가셔서 확인해 보시고 설정하시기 바랍니다.
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
답변 감사합니다.
답변 감사합니다. 열심히 문서를 찾아보고 있는데 잘 찾기가 힘들군요 ㅎㅎ;;;
웹호스팅에서 가장 중요한게 고객이 돌리는 애플에서 걸리는 부하 같습니다.
원인 모르게 부하가 많이 걸렸을 경우의 대부분이 MySQL 의 과도한 쿼리가 단연 최고였으며,
그 다음이 과도한 동시 접속이었습니다.
큰형이 기흥의 오라클 서버를 튜닝할때 약 4초정도 걸리던 쿼리문을 0.2초까지 줄였다고 자랑할때는 "그게 어때서 ?"
라고 생각했는데 지금은 어플 자체의 로직보다는 DB 쿼리문 하나가 더 소중하다는 것을 점점 깨닫고 있습니다.
어플 자체의 로직이 하찮다는것이 아니라 DB 와 연동이 된다면 DB 쪽에 좀 더 신경을 써서 결과를 빨리 뽑아내는
쪽이 성능이 더 좋은 것 같다는 얘기입니다...
댓글 달기