본문으로 건너뛰기

12.8 Linux AIO 사용

HornetQ에서 메시지를 저널에 저장하고 읽을 때 기본적으로 Java의 NIO(Nonblocking I/O)를 사용한다. 리눅스에서는 더 빠른 I/O 처리를 위해 AIO(Asynchronous I/O) 모듈을 제공한다. HornetQ에서도 리눅스에서 사용하면 Java NIO보다 더 빠른 IO처리를 위해 리눅스의 AIO를 사용하는 모듈을 제공하고 있다. AIO를 사용하려면 리눅스 커널 2.6 이상에 libaio 패키지가 설치되어 있어야 한다. 또 AIO를 사용하려면 ext2, ext3, ext4, jfs, xfs와 같은 파일시스템이 필요하다. NFS를 사용하면 속도가 많이 떨어지게 되니, NFS에서는 사용하지 않는 것을 권장한다.

libaio 설치

RHEL에서는 다음 명령으로 libaio를 설치한다.

$ sudo yum install libaio

AIO 모듈 설치

AIO 모듈은 JBoss EAP 6의 네이티브 컴포넌트에 포함되어 있다. 네이티브 컴포넌트는 플랫폼별로 배포되기 때문에 설치하고자 하는 플랫폼의 파일을 다운로드 받아 사용한다.

설치 방법은 다음과 같이 다운로드 받은 파일의 압축을 풀어 JBoss 가 설치된 modules 디렉터리에 복사하면 된다.

$ unzip jboss-eap-native-6.2.0-RHEL6-x86_64.zip

$ cp -R jboss-eap-6.2/modules $JBOSS_HOME/.

저널타입 변경

리눅스에 libaio 패키지를 설치하고, JBoss EAP 6에 네이티브 컴포넌트를 설치한 후 JBoss EAP 6의 HornetQ에서 AIO를 사용하려면 저널타입(journal-type)을 변경하여야 한다. JBoss EAP 6의 full, full-ha 프로파일에서만 메시징 서브시스템을 사용할 수 있다.

다음 CLI 명령으로 journal-type을 AIO로 변경할 수 있다.

[standalone@127.0.0.1:9999 hornetq-server=default] :write-attribute(name=journal-type, value=ASYNCIO)
{
"outcome" => "success",
"response-headers" => {
"operation-requires-reload" => true,
"process-state" => "reload-required"
}
}

위와 같이 CLI 명령으로 journal-type을 변경하면 사용하는 설정파일인 domain.xml이나 standalone-full.xml, standalone-full-ha.xml 파일의 내용이 다음과 같이 변경된다.

<hornetq-server>
<persistence-enabled>true</persistence-enabled>
<journal-type>ASYNCIO</journal-type>
<journal-min-files>2</journal-min-files>

서버를 재 시작하면, server.log에 다음과 같은 메시지가 출력되면 AIO를 사용하도록 변경된 것이다.

16:56:14,165 INFO [org.hornetq.core.server] (MSC service thread 1-2) HQ221012: Using AIO Journal