Web Hosting

post-sitemap.xml 페이지 접근시 503오류 발생으로 웹서버가 다운(Service Unavailable)되는 현상 해결방법은?

몇 일 간격으로 워드프레스로 운영중인 블로그가 다운되는 현상이 발견되어 모니터링을 시작했고,

많은 조치를 취했다. 그 중에는 1메가가 넘는 이미지 파일들을 찾아서 일괄로 변경도하였다.

리눅스 이미지 파일 찾기 및 이미지 일괄 사이즈 변경 하는 방법(AWS 라이트세일 비트나미)

그리고 최근에 아래 내용들을 조치하였다.

[Sun Feb 04 01:42:58.101318 2024] [mpm_event:notice] [pid 754:tid 140412568337664] AH00491: caught SIGTERM, shutting down

그러나 원인을 알 수 없는 이유로 웹서버가 또 다운되었다.

로그를 확인해보았으나 서버가 다운될만한 요소가 아무것도 없었다. 설치된 플러그인이 문제되는건 아닌가???

그래서 아래와같은 조치를 취했다.

  1. 워드프레스 최신버전으로 업데이트
  2. All in One SEO 최신버전으로 업데이트
  3. JetPack 최신버전으로 업데이트

그럼에도 불구하고 2월 6일 또 다시 서버가 죽었다.

[Tue Feb 06 11:38:08.503630 2024] [mpm_event:notice] [pid 771:tid 140606825970944] AH00491: caught SIGTERM, shutting down

2월4일 로그와 비교하여 확인해보니 드디어 규칙이 확인되었다.

40.77.167.143 – – [04/Feb/2024:01:42:37 +0000] “GET /post-sitemap.xml HTTP/1.1” 200 62478

40.77.167.143 – – [04/Feb/2024:01:42:39 +0000] “GET /post-sitemap.xml HTTP/1.1” 503 299


40.77.167.3 – – [06/Feb/2024:11:36:31 +0000] “GET /post-sitemap.xml HTTP/1.1” 200 62479

40.77.167.3 – – [06/Feb/2024:11:36:33 +0000] “GET /post-sitemap.xml HTTP/1.1” 503 299

post-sitemap.xml 페이지를 접근시 첫번째는 성공하지만 두번째 호출되면 503오류가 발생하면서 죽는다??

재현을 해보기로 하였다. 4번 호출만했더니 서버가 죽었다.

Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

아마존라이트세일 콘솔에 로그인 후 cpu지표를 확인하였다. 지극히 정상이었다. 버스트 영역에는 진입하지도 않았다.

봇이 크롤링해가는 것인지는 알 수 없으나 오류가 발생한 원인은 확실하게 재현되었다.

오류원인은 게시글이 2360개가 넘어서 로드하는데 시간이 걸리는 것이다.


Service Unavailable 해결 방법은?

1.php.ini 설정확인

서버실행 시간 제한이 걸리는것인가? php.ini 파일 설정을 알아보기로 하였다.

비트나미 워드프레스의 php.ini 파일은 /opt/bitnami/php/etc/php.ini 위치에 있다.

해당 파일을 vi 에디터로 열고 메모리 제한 설정값을 확인하였다.

실행시간 max값을 확인하였다. 30초로 설정되어있다. 그런데 post-sitemap.xml 페이지 접근 후 10초 내로 조회되어 가져오고 있다.

그럼에도 불구하고 이 값을 늘리는게 맞을까?


2. max_input_time 설정값 변경

해당 파일 작업하기 전에 백업을 진행하였다. 참고로 su계정으로 접근해야 수정이 및 백업이 가능하다.

파일 백업 후 vi에디터로 접근하여 max_input_time 설정값을 60초로 변경하였다. 저장하고 웹서버를 재부팅하였다.

그리고 다시 테스트를 진행하였다. 예상했던대로 서버가 다운되었다. 해결책은 아닌것이다.

구글링을 해보니 아래와 같은 내용도 찾을 수 있었다. PHP 메모리와 실행 시간을 늘린 후에도 500 오류가 계속 발생하는 경우 서버의 PHP 스크립트 런타임 제한에 도달했기 때문일 수도 있다고했다. 스크립트가 사이트맵을 생성하는 데 필요한 시간을 줄이려면 사이트맵의 항목 수를 줄이면 된다는 것이다. (원문 보기)

3. 사이트맵 항목 수 줄이기

All in One SEO를 제거하고 Yoast SEO를 설치하였다. 그런다음 sitemap.xml 페이지로 접근해보았다.

post-sitemap.xml 파일이 3개가 생성되었다. 확인해보니 1000개 단위로 나눠주고 있었다.

그럼 또다시 부하테스트를 시도해보았다. 해당페이지를 10개를 띄워도 서버가 다운되지 않았다.

드디어 해결이다.!!!

그럼에도 불구하고 또다시 다운되는 현상이 발생된다면, sitemap의 항목수 제한을 시도해볼 것이다.

/* Limit the number of sitemap entries for Yoast SEO */
function max_entries_per_sitemap() {
    return 100;
}

add_filter( 'wpseo_sitemap_entries_per_page', 'max_entries_per_sitemap' );

☞ Yoast SEO 사이트맵 항목수 제한 방법

error: Content is protected !!