[Ubuntu ] apache2 + tomcat6 + jsp Spring 에서 최초로 외부 서버 접속시 17초의 딜레이가 생깁니다.
글쓴이: sitan81 / 작성시간: 금, 2013/10/25 - 1:13오후
DNS 캐싱 관련된 이슈인것 같아서 관련해서 서칭을 아무리 해봐도 답을 찾을수가 없어
글을 남깁니다.
[Ubuntu ] apache2 + tomcat6 + jsp Spring 로 서버를 운영중이며
jsp Spring 에서
내부서버안의 행동이 아닌 외부서버( facebook )로 접속해 파싱해 올려면 17초씩 걸립니다.
최초 한번만 그렇게 되고 2번쨰 부터는 빠르게 응답합니다.
아마도 DNS를 찾아 헤메다 찾아서 저장해 놓는것 같은데..
이걸 좀 빠르게 할수 있는 방법이 있을까요??
Forums:
tcpdump + thread dump
tcpdump를 통해서 dns 쿼리에 지연이 발생하는지,
tomcat에서 일어나는 일을 thread dump 발생시켜서 확인할 수 있습니다.
--
http://www.dgkim.net/
답변 주셔서 감사합니다.
서버 초보라서 tcpdump 라는 말을 처음 접해 보았습니다.
http://iniciel.blogspot.kr/2009/07/tcpdump-%EC%82%AC%EC%9A%A9%EB%B2%95.html
사용법은 위의 사이트를 참고하였습니다.
tcpdump -w tcpdump.log -s 1500 tcp port 22 and host my.ip.add.res
를 사용 하여 확인을 해보았는데
log파일이 읽을수 없게 생성이 되더군요
사실 답변 해주신 내용도 정확히 이해는 하지 못하고 있습니다.
좀더 풀어서 설명해주실수 있을까요??
log 파일은 네트워크 통신 내역입니다.
w로 기록한 파일 내용은 사용자가 읽기 편하기 위한 파일이 아닌,
네트워크 통신 내용 자체이므로 바이너리 파일입니다.
w옵션은 필요가 없이 아래와 같은 간단한 구문으로 통신 내역을 추적할 수 있습니다.
n 옵션으로 ip나 port를 있는 그대로 봅니다.(resolve하지 않는다고 하지요.)
port 옵션에 53으로 dns 통신만 보겠다고 지정하였습니다.
간단하게 www.facebook.com 접근시 dns 응답 형태를 보여드립니다.
위 결과에서 192.168.0.42가 본인 IP이며, 8.8.8.8을 dns 서버로 사용중입니다.
www.facebook.com 에 대한 이름 찾기를 수행한 것인데,
호스트 설정에 따라서 A? 대신에 AAAA?라던가 www.facebook.com 뒤에 다른 것이 붙을 수는 있습니다.
그리고, 다음줄에 8.8.8.8에서 응답이 온 것이 보이며, IP주소가 반환된 것이 보이고,
두 패킷간에 응답시간차이는 100ms도 안걸린 것으로 나옵니다.
질문하신 것과 같이 dns 응답이 느린지를 알기 위해서는
dns서버에서 응답이 온 것을 보고, 17초가 걸린 것인지 확인할 수 있다는 것입니다.
dns 응답 문제인지는, 위와 같이 캡쳐 내용을 보여주시면 응답시간이 문제가 있었는지 알 수 있습니다.
ps. 위 내용중에 tcpdump 내용중 a href html이 포함된 것은 kldp 이슈입니다.
--
http://www.dgkim.net/
자세한 설명 감사드립니다!
자세하게 풀어서 설명해 주셔서 너무 너무 감사합니다.
덕분에 어떤 것을 해야 하고 어떤것을 보여주고 고민을 이야기 해야 하는지 알수 있었습니다!
아래 덤프 에서 13259가 한 묶음으로 해석 하면 되는 것 같은데 맞을지는 모르겠습니다.
총 로그를 그냥 주욱 보여드리긴 죄송스러워서 혹시 저렇게 분류하는것이 맞을지는 모르겠지만 분류해보았습니다.
전체적으로 봤을때 응답까지 8초정도 걸리는걸 확인할수 있었습니다.
이 응답속도를 향상 시킬수 있는방법이 있을까요?
다시 한번 덧붙이자면
최초의 호출만 느릴뿐 2번째 부터는 빠르게 응답하고 있습니다.
총 덤프
ip를 어느 정도 바꾸신 것 같긴 한데, dns 가 잘못 설정된 것 같습니다.
IP 주소를 일부로 192.168.0.42로 바꾸신 것으로 생각하고 dns 서버는 바꾸지 않은 것으로 생각합니다.
dns를 코넷과 구글을 사용하려고 의도하신 것 같은데,
168.192.63.1 168.192.63.2 넣으신 것으로 보입니다.
원래 코넷 dns는 168.126.63.1 168.126.63.2 입니다.
즉, 잘못된 IP가 1차 2차로 등록되어 있으니 응답을 받지 못하고,
5초 3초 ? 정도 갭을 두고 다른 서버로 시도했는데,
구글의 8.8.8.8은 유효한 dns이니 바로 응답을 보여줍니다.
그리고, 프로그램에서 하나이상의 dns 쿼리를 수행하는 것으로 보이며,
5초, 3초 를 대충 2번 반복한다라고 하면, 얼추 17초 정도 나오겠네요.
--
그러면, 생각하신대로 dns 문제로 보신 것은 맞는데, dns 서버 주소를 잘못 사용하고 계셨네요.
그리고 thread dump는 dns와는 별개로 서버에서 처리하는 시간이 오래 걸린다고 판단했을 때 볼 문제입니다
--
http://www.dgkim.net/
말씀대로 바꿔주니 빠르게 응답하고 있습니다!!
> IP 주소를 일부로 192.168.0.42로 바꾸신 것으로 생각하고 dns 서버는 바꾸지 않은 것으로 생각합니다.
제가 이부분을 누락하고 설명 드리지 못했네요
서버의 ip를 그대로 노출되는것이 어떠한지 알수 없어서 바꾸었습니다.
역시 고수분이시라 단번에 눈치 채주시는군요
누락된 설명 죄송합니다.
말씀해주신대로 네임서버의 주소를
168.192.63.1 -> 168.126.63.1 변경하니 잘 작동하고 있습니다.
수정은
http://nokia.egloos.com/9651836
위의 사이트의 도움을 받았습니다.
정말 정말 감사드립니다!!
계속 안고가야 할 문제를 풀어내어 주신것 같아 너무나 너무나 감사드립니다!
thread dump도 설명드립니다.
thread dump를 수행하면, tomcat에서 처리중인 상황을 볼 수 있습니다.
tomcat process에 대하여 kill -3 명령으로 만들 수 있습니다.
아래와 같이.
kill -3 명령은 kill 명령과 같이 프로세스를 내리는 것이 아니라, -3이란 시그널을 보내고, java에서는 -3 시그널을 받으면 thead dump를 생성합니다.
thread dump라고 생성된 내역은 catalina.out 파일에 덧붙여 집니다.
--
http://www.dgkim.net/
답변 감사드립니다.
성의껏 답변 주셔서 감사합니다.
첫 서버를 우분투로 선택하고 시작한지 1개월이 된 저로서는
스레드 덤프로 무엇을 할수 있는지는 정확히 잘 인지 못하고 있습니다.
catalina.out 파일이 엄청 자세히(??) 보인다는 느낌을 받았습니다.
thread dump 생성을 끄는 방법은 무엇인지 알수 있을까요?
감사합니다.
thread dump는 일회성입니다.
kill -3 수행한 시점에만 한번 발생하는 것입니다.
--
http://www.dgkim.net/
앗 그랬군요
전 꺼야 하는줄 알고 여기 저기 서칭을 하다가
kill -quit 라는 명령어를 날렸었습니다..
문제는... 없을까요??
댓글 달기