Apache가 넘어지지 않도록하려면 어떻게해야합니까?


8

트래픽이 보통 인 단일 Magento 전자 상거래 사이트를 호스팅하는 한 쌍의 서버가 있습니다 (Google 웹 로그 분석에서 하루 60 만 페이지 조회, 서버 자체에서 약 80k보고). 데이터베이스 서버는 드물게 간헐적으로 발생하지만, 아파치 서버는 종종 자주 쓰러지고 있습니다.

권장 PHP 캐싱 (APC)을 사용하고 1.5 기가 tmpfs에 자체 캐시 파일을 보유하도록 magento를 설정했습니다 (이 tmpfs는 정기적으로 가득 차 있습니다. tmpfs가 80 % 이상 가득 참). Amazon Cloudfront에서 대부분의 이미지를 제공합니다. 최근에 nginx를 아파치에 대한 리버스 프록시로 설정했습니다 (nginx도 정적 파일을 제공합니다). 나는 최선을 다해 아파치를 구성했다-keepalives와 hostnamelookups는 꺼져 있고 prefork는 다음과 같이 구성되어있다 :

<IfModule prefork.c>
    StartServers      50
    MinSpareServers   50
    MaxSpareServers  100
    ServerLimit  512
    MaxClients   256
    MaxRequestsPerChild 400
</IfModule>

.htaccess 파일을 끄지 않았으며 액세스 로깅이 켜져 있습니다. 내가 끌 수있는 몇 가지 모듈이 있다는 것을 알고 있습니다. 이 세 가지 변경 중 어떤 영향이 있을지 확실하지 않습니다.

아파치 서버는 6 기가 RAM의 VPS입니다. 서버를 작성하는 시점에서보고 load average: 17.77, 18.27, 49.76하고 있지만 약 2 기가의 RAM 여유 공간이 있습니다. 그것이 정말로 나빠지면,로드는 120+로 가고 거기에 머물러 있습니다-아파치를 다시 시작하면 사이트가 다시 시작되고로드가 다시 낮아집니다.

vmstat서버가 위의로드를보고하는 동안 0에서 70 정도의 CPU 유휴 값을 보여줍니다. iostat0에서 0.2 % 사이의 iowait 값을 보여줍니다.

나는 조금 붙어있다. 내가 아는 것은 문제는 코드 실행과 사용자 수의 조합으로 인해 CPU가 오버로드된다는 것입니다. 그러나 나는 그것이 문제라는 것을 확신 할만큼 경험이 충분하지 않습니다. 이것이 문제라면 해결책은 코드를 개선하거나로드 밸런서로 두 개의 VPS를 통해 사이트 호스팅을 분할하는 것입니다.

그래서 내 질문은 다음과 같습니다.

  1. 서버에서 문제 나 병목 현상을 찾으려면 어떻게해야합니까?
  2. 이를 개선하기 위해 서버 구성을 변경할 수있는 명백한 변경 사항이 있습니까?
  3. 로드가 특정 레벨을 초과 할 때 자동 시스템이 아파치를 다시 시작하도록 설정하는 것이 좋습니까?
  4. 위에서 사이트가 서버를 능가했을 가능성은 얼마나됩니까?

편집하다:

나는 이상한 것을 발견했다-/ var / spool / mail / root가 크다 ... 38 공연. 건강하지 않은 것 같습니다. 그게 문제가 될 수 있습니까?


2
38GB 메일? 거기에서 무슨 일이 일어나고 있는지 알아보십시오. 그런 다음 수정하십시오.
Alister Bulman 2016 년

2
" 아파치가 넘어지지 않게하려면 어떻게해야합니까? "-나무 다리를 줘서 판자에서 멀리 떨어 뜨려 놓으십시오.
Shaz

메일 파일은 루트 cron 또는 crontab 오류 출력으로 인한 것 같습니다. 채팅 작업이 있으면이 파일을 채우는 것입니다.
Kyle Smith

1
6GB의 램이 있지만 64 비트 OS입니까? 실제로 현재 사용중인 4GB 이상을 사용할 수 있습니까? 이것이 미션 크리티컬 박스라면 Linux-HA를 확실히 실행하고 장애 조치 목적으로 두 박스로 나눕니다. 추락 할 때마다 수익에 영향을 미치지 않는다면 당신의 상사가 그렇게 진지하게 생각하지 않을 것입니다.
오리

답변:


3

마 젠토와 젠드 프레임 워크는 CPU가 상당히 무겁다. CPU로드를 피하는 가장 좋은 방법은 변경 될 때까지 단순히 컨텐츠를 한 번만 렌더링하는 것입니다. 카탈로그의 대부분의 부분은 자주 변경되지 않으며 종종 페이지의 장바구니 블록 또는 '가장 인기있는 항목'블록 만 동적 부분입니다.

Apache 앞에 Varnish 캐시를 넣는 것이 좋습니다 . 이를 통해 LAMP 스택을 심각하게 오프로드 할 수있는 고성능 페이지 캐싱을 제공합니다. 우리는 최근 Varnish 덕분에 웹 사이트를 공개적으로 시작한 후에도 살아남 았으며 속도와 CPU 부하가 낮다는 것에 깊은 인상을 받았습니다. 니스는 무료이며 전체 페이지를 캐시하거나 비교적 정적 인 부분 만 캐시하고 카트를 동적으로 포함 할 수있을만큼 유연합니다.

사용자 별 동적 컨텐츠, 쿠키, 많은 거기 때문에, 광택이 기본 젠토 설치에 많은 캐시하지 않습니다 등 젠토 모듈과 같은 '등의 니스에 의해 구동 페이지 캐시 니스와 잘 작동하도록 수정 젠토'. 또한 Magento 설정과 일치하는 Varnish 구성 파일을 제공합니다. 이 두 가지를 함께 사용하면 매우 효율적인 설정이 가능합니다. 상용 모듈이지만 더 강력한 서버보다 훨씬 저렴합니다.

CDN 또는 Nginx로 오프로드하는 부분은 실제 문제는 아니지만 도움이됩니다. 아파치조차도 많은 정적 요청을 처리 할 수 ​​있습니다. 여러 번 반복해서 생성하는 작업, 즉 동적 부품을 캐시해야합니다.


나는 Varnish를 살펴 보았으며 적어도 CPU 설정이 더 나은 호스트로 이동할 수있을 때까지 CPU로드를 줄이는 좋은 해결책처럼 보입니다. 감사.
Dave Child

3

나는 일반적으로 MaxRequestsPerChild를 수천에, 보통 10,000에 가깝게 설정합니다.

"권장 PHP 캐싱"을 가지고 있지만 APC가 설치되어 있습니까? 마지막으로 몇 명의 사용자가 동시에 웹 사이트를 방문하는 것으로 보입니까? Apache 확장 통계가있는 경우 한 번에 몇 개의 Apache 프로세스가 실제로 Running 상태인지 확인할 수 있습니다.

초당 800 개의 APC 파일이 방문하고 200 개의 사용자 캐시가 많이 있습니다. 그것이 듀얼 또는 쿼드 코어라면 그래도 괜찮을 것으로 기대합니다. 데이터베이스가 실제로 유지된다면 더 큰 머신과 더 많은 CPU를 얻는 것이 적어도 지금 당장 가장 좋은 것일 수 있습니다.


먼저 고마워요! 부하는 여전히 높기 때문에 이러한 것들 중 일부를 바로 시도해 볼 수 있습니다. MaxRequestsPerChild를 4000으로 늘 렸습니다.로드가 즉시 점프하고 매우 높게 유지되었습니다. 나는 그것을 1000으로 줄였고, 여전히 너무 높지만 부하가 다소 떨어졌습니다. APC가 설치되었습니다. SHM은 256입니다. include_once 재정의가 켜져 있습니다.
Dave Child

APC가 이미 설치되어 있으면 apc.php는 무엇을보고합니까? -에서 다운로드 svn.php.net/viewvc/pecl/apc/trunk/apc.php?view=markup
알리 스터 Bulman

다음은 출력입니다 (사이트 / 서버에 직접 연결하지 않는 것이 좋습니다
Dave Child

답장을 수정했다는 사실을 몰랐습니다. 예, 듀얼 코어 VPS (Xeon 2.4ghz)입니다. 이 서버가 현재로드를 처리 할 수 ​​있어야한다고 생각했기 때문에 구성에서 무언가를 놓치거나 병목 현상을 발견하지 못한 것에 대해 걱정하고 있습니다.
Dave Child

2

평균 코어로드가 듀얼 코어 VPS에 비해 너무 높습니다. 8은 최대 값이어야합니다.

Magento에 mod_pagespeed 및 이벤트 MPM을 사용하는 데 성공했습니다. 이벤트 MPM 사용으로 전환하고 mod_pagespeed를 설치하는 것이 좋습니다.

Event MPM에 대한 추가 정보 : Apache event MPM 문서

그리고 mod_pagespeed : 구글 코드 : mod_pagespeed

위와 같이 변경 한 후에도 계속로드 문제가 발생하면 더 나은 다른 VPS 계획으로 전환하는 것이 좋습니다.


2

Alister가 암시하는 것처럼 MaxRequestsPerChild 값 400은 터무니없이 낮습니다.

로드 평균은 매우 높지만 하루에 60 만 페이지 뷰는 많은 트래픽이 아닙니다.

일반적으로 서비스 요청을 처리하는 프로세스는 몇 개입니까?

Magento에 익숙하지 않지만이 설정에 문제가있는 것 같습니다. 더 낮은로드 레벨에서 훨씬 더 많은 처리량을 얻을 수있을 것으로 기대합니다.

Steve Souders 책을 구해서 읽으십시오. 나가는 모든 HTML 컨텐츠 (정적 및 동적)에 대해 압축을 사용하십시오. 캐싱 구성이 좋은지 확인하십시오. access_log 파일에서 % D 로깅을 시작하고 데이터를 분석하고 속도를 분리하기위한 몇 가지 도구를 빌드하십시오. MySQL과 비슷합니다.

mysqltuner.pl을 시도하여 문제가 있는지 확인하십시오.


일반적으로 10-20 개의 프로세스는 어떤 시점에서도 적극적으로 요청을 처리합니다. 부하가 매우 높으면 더 많이합니다. Magento는 실행하기 어려운 괴물이므로 다른 시스템이이 트래픽과 설정에 문제가 없을 것으로 예상되지만 Magento가 상자를 넘어서고 있다고 생각할 수 있습니다. 책 추천에 감사드립니다.
Dave Child

mod_pagespeed는 Magento에 많은 도움이됩니다. 시도 해봐.
laebshade

2

비슷한 설정을 수행하지만 nginx / php-fpm / apc (opcode 및 fast_backend / memcached (slow_backend))를 사용합니다. php가 가장 큰 리소스 문제인 것으로 보입니다. 정확히 자원을 먹는 것이 무엇인지 살펴보십시오. 제 경우와 같이 PHP 일 수 있습니까?

Martijn Heemels가 작성한 것 외에도 시도 할 수있는 오픈 소스 바니시 모듈이 있습니다. http://moprea.ro/2011/may/6/magento-performance-optimization-varnish-cache-3/https://github.com/madalinoprea/magneto-varnish를 확인 하십시오 .
테스트 환경에서만 테스트했으며 지금까지는 좋았습니다.


데이터베이스 나 디스크 (그리고 tmpfs)에 세션을 저장합니까?


그것들은 tmpfs에 저장됩니다.
Dave Child

1

VPS를 사용하면 CPU를 공유하는 것입니다. VPS를 덜 바쁜 하드웨어로 옮기거나 전용으로 사용하려면 호스트와 대화하는 것이 좋습니다.

공유 CPU로 인해 응용 프로그램이 정시에 실행될 수 없으며 처리 대기중인 높은 요청과 함께 제공되는 오버 헤드를 계속 대기 할 수 없습니다. 결국 Apache 또는 php 또는 mysql이 자체 한계를 초과하여 문제를 일으키는 조건이 있습니다.

결론은 VPS는 기본적으로 공유 CPU입니다. 호스트가 동일한 CPU에 너무 많은 VPS 계정을 넣었을 수 있습니다.

할당 된 CPU를 최대한 활용하려면 가능한 한 적은 VPS로 더 나은 서버를 요청하거나 문제가있는 호스트를 이동 시키십시오.

또한 Amazon을 완전히 선택할 수 있으며 클라우드에서 모든 서버에 대해 몇 번의 클릭으로 설정하는로드 밸런서를 사용하여 nginx에 대해 걱정하지 않아도됩니다.

/var/mail.../root 폴더는 색조입니다. 일반적으로 응용 프로그램에서 많은 전자 메일을 수집합니다. 예를 들어 버기 PHP 스크립트가 이메일을 보내려고하거나 모든 크론 작업이 크론 실행 상태와 출력을 이메일로 보내도록 구성되어 있습니다. 메일 내부를보고 파일의 내용을 볼 수 있습니다. 오류 메시지를 추측하여 어디에서 왔는지 찾을 수 있습니다.

추가 정보가 필요하면 더 추가하고 정보가 필요할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.