티스토리 뷰
네트워크 서버의 성능테스트용으로 netty(http://netty.io)기반으로 테스트툴을 만들었는데,
테스트툴 내부에서 여러개의 소켓 생성시 문제가 발생. 이를 step by step으로 확인해 봄~
* 윈도우에서는 괜찮았는데, 리눅스(centos 6.3)에서는 10개이상의 소켓을 생성하려고 하면 오류발생.
오류 :
org.jboss.netty.channel.ChannelException: Failed to create a selector.
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.openSelector(AbstractNioSelector.java:343)
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.<init>(AbstractNioSelector.java:100)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.<init>(AbstractNioWorker.java:52)
at org.jboss.netty.channel.socket.nio.NioWorker.<init>(NioWorker.java:45)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:45)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:28)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.newWorker(AbstractNioWorkerPool.java:143)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.init(AbstractNioWorkerPool.java:81)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.<init>(NioWorkerPool.java:39)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.<init>(NioWorkerPool.java:33)
at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(NioClientSocketChannelFactory.java:151)
at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(NioClientSocketChannelFactory.java:116)
at boazcmt.tip.client.TipClient.init(TipClient.java:196)
at boazcmt.tip.client.TipClient.<init>(TipClient.java:70)
at boazcmt.nsst.client.tip.TipTestClient.init(TipTestClient.java:39)
at boazcmt.nsst.task.InitClientTask.runTask(InitClientTask.java:43)
at boazcmt.nsst.task.BaseTask.run(BaseTask.java:20)
at boazcmt.nsst.schedule.scheduler.StartScheduler.execute(StartScheduler.java:36)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: java.io.IOException: 열린 파일이 너무 많음
at sun.nio.ch.IOUtil.makePipe(Native Method)
at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:65)
at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:36)
at java.nio.channels.Selector.open(Selector.java:227)
at org.jboss.netty.channel.socket.nio.SelectorUtil.open(SelectorUtil.java:63)
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.openSelector(AbstractNioSelector.java:341)
... 19 more
오류 중간에 보면 '열린 파일이 너무 많음' 이라고 보임.
구글링 해보니 OS의 설정에 열 수 있는 파일의 최대개수를 확인해 보라 함.
그래서 확인해 보니
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 127124
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
음.. 최대 1024개까지만 생성(?). 이미 netty 클라이언트를 100개 생성해서 돌리고 있는 상황에서 뭐 이것저것 하다보면 1024가 초과가 될 수도 있겠다 생각이 듬.
open files 값을 늘려 보기로 함.
설정관련된 글은 http://blog.naver.com/yehyang0512/40146844770 참고.
OS에서의 최대 파일 개수, 사이즈 관련 글은 http://parknom.tistory.com/336 참고.
* 현재 프로세스가 사용한 파일개수 확인
lsof -p 프로세스ID |wc -l -> 전체 파일 확인
lsof -p 프로세스ID |grep 'TCP' |wc -l -> TCP연결만 확인
* 위의 명령어로 확인해 보니 아래처럼 특정 패턴의 파일들이 너무 많음.
java 29539 hotchat 233w FIFO 0,8 0t0 9642247 pipe
java 29539 hotchat 234u REG 0,9 0 3650 anon_inode
java 29539 hotchat 235r FIFO 0,8 0t0 9642248 pipe
java 29539 hotchat 236w FIFO 0,8 0t0 9642248 pipe
java 29539 hotchat 237u REG 0,9 0 3650 anon_inode
* 관련 내용을 구글링 해 보니 아래와 같은 글이 있음.
내용인 즉슨, nio 사용시 많이 생길수 있다(?) ㅡ.ㅡ;;;;
그래서 TipClient에서 bootstrap 생성시 소켓을 NioClient에서 OioClient로 생성하니
NioClient일때는 약 1400여개 였던게
OioClient를 사용하니 164개로 급떨어짐.
테스트툴에서는 단순히 내부적으로 복수개의 소켓을 생성해서 테스트하려는 서버에 접속해서
테스트용 패킷을 주고받는 역할을 하는지라 굳이 nio를 사용하지 않아도 되지 싶다.
어쨌든 소중한(?) 경험을 한 것 같아 기분이 참 좋았다(초딩 일기체 ㅋㅋ)
'About 개발~~' 카테고리의 다른 글
[javascript] 크롬브라우저에서 cross origin 어쩌구 관련 해결 팁~ (0) | 2014.05.30 |
---|---|
[무선기술] 무선 통신 / 무선 디스플레이 기술 초간단 정리~ (0) | 2014.05.13 |
[Spring] Quartz 스케줄러 연동 퀵가이드~ :) (0) | 2014.03.24 |
[스마트TV] 삼성 스마트TV 개발환경 셋팅~ (0) | 2014.02.14 |
[RabbitMQ] 설치 및 사용 for beginner :) (0) | 2014.01.27 |
- Total
- Today
- Yesterday
- JavaScript
- SVN
- 톰캣
- db
- QR코드
- http
- 개화예술공원
- MySQL
- 안드로이드
- socket
- 중도캠핑장
- 주저리
- 중도
- 오토캠핑
- 주저리주저리
- netty
- spring
- 스마트tv
- 발번역
- network
- 이클립스
- 캠핑
- json
- 무제
- 단상
- 개발
- 자바
- myBatis
- 스프링
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |