본문으로 건너뛰기

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_time30keep-alive 시간을 줄인다.
net.ipv4.tcp_fin_timeout10FIN 타임아웃 시간을 줄여 FD를 빨리 확보할 수 있도록 한다.
net.core.netdev_max_backlog2500백로그에 들어오는 소켓 개수를 늘린다.
net.ipv4.tcp_retries13TCP 연결에 문제가 있을 때 연결을 재시도하는 횟수(최솟값은 3이다)
net.ipv4.tcp_retries23TCP 연결을 끊기 전에 재시도하는 횟수를 줄인다.
net.ipv4.ip_local_port_range1024 65000사용할 수 있는 로컬 포트 범위를 늘린다.
net.core.rmem_max56777216TCP 수신 버퍼크기 최댓값을 늘린다.
net.core.rmem_default16777216TCP 수신 버퍼크기 기본값을 늘린다.
net.core.wmem_max56777216TCP 전송 버퍼크기 최댓값을 늘린다.
net.core.wmem_default16777216TCP 수신 버퍼크기 기본값을 늘린다.
net.ipv4.tcp_window_scaling165kb 이상의 큰 TCP 윈도우 스케일링을 사용한다.
net.ipv4.tcp_orphan_retries0서버 측에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 줄인다. 기본값은 7로 50초~16분 정도 걸린다.
net.ipv4.tcp_sack0SYNC 패킷을 전송한 후 일부 ACK를 받지 못했을 경우 선택적으로 받지 못한 ACK 패킷을 받도록 설정할 수 있다. 0은 받지 않는 설정이다. 패킷 유실이 많은 네트워크에서는 1로 설정한다.

표 5. 주요 리눅스 커널 파라미터

  • 적용방법

    웹 서버와 JBoss 서버 모두 /etc/sysctl.conf 파일에 다음 설정을 추가한다.

    # Updates
    net.ipv4.neigh.default.unres_qlen=100
    net.ipv4.tcp_keepalive_time = 30
    net.ipv4.tcp_fin_timeout = 10
    net.core.netdev_max_backlog = 2500
    net.ipv4.tcp_retries1 = 2
    net.ipv4.tcp_retries2 = 3
    net.ipv4.ip_local_port_range = 1024 65000
    net.core.rmem_max =56777216
    net.core.rmem_default = 16777216
    net.core.wmem_max = 56777216
    net.core.wmem_default = 16777216
    net.ipv4.tcp_window_scaling = 1
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_sack = 0
    net.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