파일기술자(file descriptor) 한계 - Apache HTTP Server Version 2.2

Apache HTTP Server Version 2.2

Apache > HTTP Server > Documentation > Version 2.2 > 가상호스트

#### Please note

This document refers to a legacy release (2.2) of Apache httpd. The active release (2.4) is documented here. If you have not already upgraded, please follow this link for more information.

You may follow this link to go to the current version of this document.

# 파일기술자(file descriptor) 한계

가능한 언어: en | fr | ja | ko | tr

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

가상호스트를 많이 사용하고 각 가상호스트에 서로 다른 로그파일을 지정하면, 아파치가 사용가능한 파일기술자(file descriptor, 흔히 파일핸들(file handle)이라고 부름)를 다 써버릴 수 있다. 아파치가 사용하는 파일기술자의 총 개수는 오류 로그파일당 한개, 다른 로그파일 지시어당 한개, 추가로 내부용도로 10-20개를 더한 수다. 유닉스 운영체제는 프로세스가 사용할 수 있는 파일기술자 개수를 제한한다. 이 한계는 보통 64개로, 보통 이보다 큰 hard-limit까지 늘릴 수 있다.

아파치는 이 한계를 필요한만큼 늘리려고 하지만, 실패하는 경우가 있다:

1. 시스템이 `setrlimit()` 시스템호출을 제공하지 않는다.
2. (Solaris 2.3과 같이) 시스템에서 `setrlimit(RLIMIT_NOFILE)` 함수가 동작하지 않는다.
3. 필요한 파일기술자 개수가 hard limit 보다 많다.
4. (Solaris 2) 시스템이 stdio 스트림을 256이하의 파일기술자만을 사용하도록 제한하는 등 파일기술자에 제약을 가한다.

이 경우 해결책은:

- 로그파일 개수를 줄인다. `<VirtualHost>` 섹션에서 로그파일을 지정하지 않고 주 로그파일을 사용한다. (더 자세한 방법은 아래 로그파일 나누기를 참고하라.)
- 사용하는 시스템이 (위의) 1번째나 2번째 경우에 해당한다면, 다음과 같은 스크립트로 아파치를 시작하기 전에 파일기술자 한계를 늘린다.

  ``#!/bin/sh
  ulimit -S -n 100
  exec httpd``

## 로그파일 나누기

여러 가상호스트가 같은 로그파일을 사용한다면 나중에 각 가상호스트의 통계분석을 위해 로그파일을 나누고 싶을 것이다. 이 작업은 다음과 같이 할 수 있다.

먼저 로그 항목에 가상호스트 정보를 추가한다. 이를 위해 `LogFormat` 지시어와 `%v` 변수를 사용한다. 이 변수를 로그 형식문자열 앞에 추가한다:

`LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost`

그러면 common 로그형식 앞에 (`ServerName` 지시어에 나오는) 정규 가상호스트를 포함하여 로그파일을 기록한다. (로그파일 사용자정의에 관한 내용은 `사용자정의 로그형식`을 참고하라.)

로그파일을 (가상호스트당 한 파일씩) 나누고 싶다면 `split-logfile` 프로그램을 사용한다. 이 프로그램은 아파치 배포본의 `support` 디렉토리에 있다.

다음과 같이 프로그램을 실행한다:

`split-logfile < /logs/multiple_vhost_log`

가상호스트 로그파일을 가지고 이 프로그램을 실행하면 로그파일에 나오는 각 가상호스트당 파일을 하나씩 만든다. 각각의 파일명은 `hostname.log`이다.

가능한 언어: en | fr | ja | ko | tr

## Comments

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.