우리 전용 서버에 문제를 일으키는 것으로 보이는 웹사이트가 있습니다.
최근에 전용 서버가 다운되었습니다. 이는 매우 짜증나는 일입니다. 무작위로 충돌합니다. 호스팅 업체 기술지원팀에서는 메모리 부족 때문이라고 밝혔다. Apache의 maxclients 설정을 늘렸지만 효과가 없었습니다.
따라서 아마도 결국에는(mysql과 이미지를 서버 밖으로 옮겼습니다) 어딘가에 많은 메모리를 사용하는 PHP 스크립트가 있다는 것입니다. 확실히 Stack Overflow 표준에서는 아니지만 비교적 인기가 있는 사이트입니다.
어딘가에 메모리 누수가 있거나 어딘가에 일종의 무한 루프가 생성되었을 수 있습니다.
어떤 스크립트가 가장 많은 메모리를 사용하고 있는지 확인하는 방법은 무엇입니까?
답변1
기억력이 부족해서 그렇습니다. Apache에 대한 maxclients 설정을 추가했습니다.
다른 서비스 제공업체를 찾아보세요.
현재 클라이언트 수를 처리할 메모리가 충분하지 않은 경우 클라이언트 수를 늘리면 문제가 더 악화됩니다.
첫 번째는 PHP 오류를 올바르게 기록하는지 확인하는 것입니다(즉, 웹서버 error_log에 기록). (의도적으로) 잘못 작성된 스크립트에 액세스하여 이를 테스트할 수 있습니다.
<?php
this_fn_does_not_exist();
메모리 부족 오류는 당시 실행 중이던 스크립트의 세부 정보와 실패한 위치를 포함하여 이 오류 로그에 기록됩니다.
세부정보를 기록하는 코드를 추가할 수도 있습니다.메모리 사용량(예: 자동 앞에 추가 스크립트 사용) 실패할 때까지 기다리지 마세요. 종료 기능을 등록하여 이를 수행하는 것이 좋습니다.
이는 리팩토링에 대한 몇 가지 우선순위를 제공해야 합니다.
또한 별도의 연습으로 httpd 프로세스 수와 사용 가능한 메모리 양을 기록하기 시작하는 cron 작업을 설정해야 합니다.
#!/bin/bash
t=`date`
m=`free | grep '+'`
p=`ps aux | grep httpd | wc -l`
echo $t $m $p >> /var/log/webload
그런 다음 결과를 그래프로 표시하여 주어진 메모리 양으로 서비스할 수 있는 클라이언트 수를 확인합니다(좋은 I/O 성능은 캐싱에 따라 달라지며 시스템에서 발생하는 I/O에 따라 다음을 수행할 수 있습니다. 메모리의 약 50%를 확보하는 것입니다).
이는 또한 리팩토링의 효율성을 측정하는 메커니즘을 제공합니다.
각 PHP 프로세스에 사용 가능한 최대 메모리를 늘리는 것은 단순히 php.ini 파일을 업데이트하는 문제입니다.
PHP/웹 서버 튜닝을 위한 일반 프로세스를 적용하십시오. 즉, 캐싱 확인, 압축이 최적으로 작동하는지 확인하고 데이터베이스 쿼리를 기록 및 분석하십시오.
때로는 더 많은 하드웨어가 필요할 수도 있습니다.