21.2 운영체제 환경 설정
JBoss 사용자
웹 애플리케이션 서버 프로세스는 일반 사용자 계정으로 기동해야 한다. 보안상의 이유로 root 계정을 사용하지 않는 것이 좋다. 예제에서는 ‘jboss’라는 사용자를 추가한다. JBoss EAP 6 스크립트에서 env.sh 파일에 JBOSS_USER 환경변수에 JBoss 인스턴 스를 구동할 리눅스 사용자 이름 ‘jboss’를 설정하면, jboss 사용자만 인스턴스를 구동할 수 있다.
$ adduser jboss
env.sh 파일에서 JBOSS_USER 환경변수를 설정한다.
export JBOSS_USER=jboss
리눅스 커널 파라미터
웹 서버와 웹 기반 미들웨어 서버는 모두 네트워크를 통해 서비스를 제공하는 시스템이다. 네트워크를 통해 데이터를 전달하기 때문에, 운영체제의 TCP/IP에 대한 튜닝은 필수적이다. 아래 표에서 설명한 핵심적인 파라미터를 적용하는 것이 좋다. 특히 TCP의 수신, 송신 버 퍼의 크기는 운영체제가 기본적으로 제공하는 것보다 크게 설정해야 서버의 성능을 향상할 수 있다. 다음 설정을 웹 서버와 JBoss 운영 서버에 대해 모두 적용한다.
| 파라미터 | 권장값 | 설명 |
|---|---|---|
| net.ipv4.tcp_keepalive_time | 30 | keep-alive 시간을 줄인다. |
| net.ipv4.tcp_fin_timeout | 10 | FIN 타임아웃 시간을 줄여 FD를 빨리 확보할 수 있도록 한다. |
| net.core.netdev_max_backlog | 2500 | 백로그에 들어오는 소켓 개수를 늘린다. |
| net.ipv4.tcp_retries1 | 3 | TCP 연결에 문제가 있을 때 연결을 재시도하는 횟수(최솟값은 3이다) |
| net.ipv4.tcp_retries2 | 3 | TCP 연결을 끊기 전에 재시도하는 횟수를 줄인다. |
| net.ipv4.ip_local_port_range | 1024 65000 | 사용할 수 있는 로컬 포트 범위를 늘린다. |
| net.core.rmem_max | 56777216 | TCP 수신 버퍼크기 최댓값을 늘린다. |
| net.core.rmem_default | 16777216 | TCP 수신 버퍼크기 기본값을 늘린다. |
| net.core.wmem_max | 56777216 | TCP 전송 버퍼크기 최댓값을 늘린다. |
| net.core.wmem_default | 16777216 | TCP 수신 버퍼크기 기본값을 늘린다. |
| net.ipv4.tcp_window_scaling | 1 | 65kb 이상의 큰 TCP 윈도우 스케일링을 사용한다. |
| net.ipv4.tcp_orphan_retries | 0 | 서버 측에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 줄인다. 기본값은 7로 50초~16분 정도 걸린다. |
| net.ipv4.tcp_sack | 0 | SYNC 패킷을 전송한 후 일부 ACK를 받지 못했을 경우 선택적으로 받지 못한 ACK 패킷을 받도록 설정할 수 있다. 0은 받지 않는 설정이다. 패킷 유실이 많은 네트워크에서는 1로 설정한다. |
표 5. 주요 리눅스 커널 파라미터
-
적용방법
웹 서버와 JBoss 서버 모두
/etc/sysctl.conf파일에 다음 설정을 추가한다.# Updatesnet.ipv4.neigh.default.unres_qlen=100net.ipv4.tcp_keepalive_time = 30net.ipv4.tcp_fin_timeout = 10net.core.netdev_max_backlog = 2500net.ipv4.tcp_retries1 = 2net.ipv4.tcp_retries2 = 3net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_max =56777216net.core.rmem_default = 16777216net.core.wmem_max = 56777216net.core.wmem_default = 16777216net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_timestamps = 0net.ipv4.tcp_sack = 0net.ipv4.tcp_orphan_retries = 0적용방법은 sysctl 명령을 사용하면 된다. 물론 리눅스 커널 파라미터를 수정하는 것이기 때문에 root 계정을 사용하여야 한다.
$ sudo sysctl -p
사용자 limit 값 설정
운영체제에서는 파일을 열 수 있는 개수 제한이 있다. 파일 오픈 개수를 늘려주는 것이 좋다.
웹 서버나 JBoss 서버 모두 네트워크를 주로 사용한다. 연결을 맺을 때 소켓(Socket)을 사용하는 것이다. 그런데 운영체제에서는 이 소켓도 파일처럼 간주한다. FD(File Descriptor)는 프로세스가 열 수 있는 파일과 소켓을 모두 포함한 값이다.
사용자가 사용할 수 있는 FD 개수가 작다면, 열 수 있는 소켓, 즉, 동시에 받아들일 수 있는 요청의 개수도 작아지게 되는 것이다. 동시에 더 많은 요청을 처리하려면 FD 값도 그만큼 커야 한다.
리눅스의 /etc/security/limits.conf 파일에서 jboss 사용자가 오픈할 수 있는 파일의 개수를 지정한다. 이 값은 웹 서버와 JBoss 서버 모두 지정한다.
또, jboss 사용자에 대한 nproc 값도 지정했는데, 이것은 프로세스의 최대 개수를 지정하는 것이다.
# /etc/security/limits.conf
#
… 생략 …
#<domain> <type> <item> <value>
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
jboss hard nofile 65536
jboss soft nofile 65536
jboss soft nproc 2047
jboss hard nproc 16384
# End of file