본문 바로가기
Bioinformatics/Technology

병렬 프로그래밍할 때 자바 쓰레드의 낮은 우선 순위(Linux)

by 임은천 2013. 2. 13.

자바 쓰레드는 경쟁이 심한 Linux 환경에서 이용될 때, 일반 우선 순위를 가진 쓰레드들은 성능이 급격히 하락한다. 그 이유는 자바에서 NORMAL의 우선 순위는 높은 nice(원래의 OS 쓰레드 우선 순위에 더해지는 우선 순위 값) 값을 가진다. Linux에서는 낮은 값일 수록 먼저 CPU 자원을 획득할 수 있기 때문에, 결국 이 말은 그냥 기본값으로 동작 시키면 주변에 많은 프로세스들이 동작하고 있을 때, CPU 자원 획득을 양보한다는 뜻이다.


물론 root 권한이 있다면, nice, renice와 같은 명령어들로 java 프로세스의 우선 순위를 변경할 수 있다. 하지만, root 권한이 없다면, 쓰레드를 사용하는 여러분의 프로그램은 성능이 매우 나빠질 것이다.


해결하는 방법은 다음과 같다. java를 실행할 때 다음의 내용을 명렬줄에 추가한다.


--XX:ThreadPriorityPolicy=42


이 값을 지정하게 되면 자바 상에서 NORMAL로 지정된 쓰레드는기본 nice 값을 가지게 된다. 쉽게 말해서 이 파라미터를 추가하게 되면, 자바에서 시작한 쓰레드도 다른 언어에서 시작된 쓰레드와 동일한 우선 순위를 가지고 처리된다는 뜻이다.


정리하면, 자바에서 쓰레드를 사용하는 프로그래밍을 한다면, 위의 옵션은 java 명령어를 치는 순간에 언제나 기본값으로 설정하길 바란다.

댓글