[Ubuntu ] apache2 + tomcat6 + jsp Spring 에서 최초로 외부 서버 접속시 17초의 딜레이가 생깁니다.

sitan81의 이미지

DNS 캐싱 관련된 이슈인것 같아서 관련해서 서칭을 아무리 해봐도 답을 찾을수가 없어
글을 남깁니다.

[Ubuntu ] apache2 + tomcat6 + jsp Spring 로 서버를 운영중이며

jsp Spring 에서

내부서버안의 행동이 아닌 외부서버( facebook )로 접속해 파싱해 올려면 17초씩 걸립니다.

최초 한번만 그렇게 되고 2번쨰 부터는 빠르게 응답합니다.

아마도 DNS를 찾아 헤메다 찾아서 저장해 놓는것 같은데..

이걸 좀 빠르게 할수 있는 방법이 있을까요??

dgkim의 이미지

tcpdump를 통해서 dns 쿼리에 지연이 발생하는지,
tomcat에서 일어나는 일을 thread dump 발생시켜서 확인할 수 있습니다.

--
http://www.dgkim.net/

sitan81의 이미지

서버 초보라서 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파일이 읽을수 없게 생성이 되더군요

사실 답변 해주신 내용도 정확히 이해는 하지 못하고 있습니다.

좀더 풀어서 설명해주실수 있을까요??

dgkim의 이미지

w로 기록한 파일 내용은 사용자가 읽기 편하기 위한 파일이 아닌,
네트워크 통신 내용 자체이므로 바이너리 파일입니다.

w옵션은 필요가 없이 아래와 같은 간단한 구문으로 통신 내역을 추적할 수 있습니다.

tcpdump -n port 53

n 옵션으로 ip나 port를 있는 그대로 봅니다.(resolve하지 않는다고 하지요.)

port 옵션에 53으로 dns 통신만 보겠다고 지정하였습니다.

간단하게 www.facebook.com 접근시 dns 응답 형태를 보여드립니다.

hostname:~ root# tcpdump -n port 53
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Packet Tap), capture size 65535 bytes
15:46:23.698916 IP 192.168.0.42.58042 > 8.8.8.8.53: 36445+ A? <a href="http://www.facebook.com" rel="nofollow">www.facebook.com</a>. (34)
15:46:23.771281 IP 8.8.8.8.53 > 192.168.0.42.58042: 36445 2/0/0 CNAME star.c10r.facebook.com., A 31.13.68.33 (74)

위 결과에서 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/

sitan81의 이미지

자세하게 풀어서 설명해 주셔서 너무 너무 감사합니다.

덕분에 어떤 것을 해야 하고 어떤것을 보여주고 고민을 이야기 해야 하는지 알수 있었습니다!

아래 덤프 에서 13259가 한 묶음으로 해석 하면 되는 것 같은데 맞을지는 모르겠습니다.

 
01:32:08.098729 IP 192.168.0.42.53062 > 168.192.63.2.53: 13259+ AAAA? android.googleapis.com. (40)

총 로그를 그냥 주욱 보여드리긴 죄송스러워서 혹시 저렇게 분류하는것이 맞을지는 모르겠지만 분류해보았습니다.

- 58698 -
01:32:11.393262 IP 192.168.0.42.56874 > 168.192.63.2.53: 58698+ AAAA? graph.facebook.com. (36)
01:32:14.396364 IP 192.168.0.42.60954 > 8.8.8.8.53: 58698+ AAAA? graph.facebook.com. (36)
01:32:14.435879 IP 8.8.8.8.53 > 192.168.0.42.60954: 58698 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., AAAA 2a03:2880:f00d:201:face:b00c:0:1 (106)
 
 
- 621 - 
01:32:11.394583 IP 192.168.0.42.46356 > 168.192.63.1.53: 621+ AAAA? graph.facebook.com. (36)
01:32:16.399686 IP 192.168.0.42.47470 > 168.192.63.2.53: 621+ AAAA? graph.facebook.com. (36)
01:32:19.402783 IP 192.168.0.42.42060 > 8.8.8.8.53: 621+ AAAA? graph.facebook.com. (36)
01:32:19.488067 IP 8.8.8.8.53 > 192.168.0.42.42060: 621 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., AAAA 2a03:2880:f00d:201:face:b00c:0:1 (106)
 
 
- 11140 -
01:32:14.436050 IP 192.168.0.42.34296 > 168.192.63.1.53: 11140+ A? graph.facebook.com. (36)
01:32:19.441153 IP 192.168.0.42.52883 > 168.192.63.2.53: 11140+ A? graph.facebook.com. (36)
01:32:22.444272 IP 192.168.0.42.45748 > 8.8.8.8.53: 11140+ A? graph.facebook.com. (36)
01:32:22.530284 IP 8.8.8.8.53 > 192.168.0.42.45748: 11140 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., A 31.13.70.17 (94)
 
 
- 5500 -
01:32:19.488125 IP 192.168.0.42.45288 > 168.192.63.1.53: 5500+ A? graph.facebook.com. (36)
01:32:24.489189 IP 192.168.0.42.56689 > 168.192.63.2.53: 5500+ A? graph.facebook.com. (36)
01:32:27.489703 IP 192.168.0.42.51945 > 8.8.8.8.53: 5500+ A? graph.facebook.com. (36)
01:32:27.552315 IP 8.8.8.8.53 > 192.168.0.42.51945: 5500 3/0/0 CNAME api.facebook.com., CNAME 

전체적으로 봤을때 응답까지 8초정도 걸리는걸 확인할수 있었습니다.

이 응답속도를 향상 시킬수 있는방법이 있을까요?

다시 한번 덧붙이자면
최초의 호출만 느릴뿐 2번째 부터는 빠르게 응답하고 있습니다.

총 덤프

 
01:32:08.098729 IP 192.168.0.42.53062 > 168.192.63.2.53: 13259+ AAAA? android.googleapis.com. (40)
01:32:08.099620 IP 192.168.0.42.59619 > 168.192.63.1.53: 65295+ AAAA? android.googleapis.com. (40)
01:32:11.101764 IP 192.168.0.42.60417 > 8.8.8.8.53: 13259+ AAAA? android.googleapis.com. (40)
01:32:11.167208 IP 8.8.8.8.53 > 192.168.0.42.60417: 13259 2/0/0 CNAME googleapis.l.google.com., AAAA 2404:6800:4005:c00::5f (102)
01:32:11.167276 IP 192.168.0.42.48740 > 168.192.63.1.53: 39674+ A? android.googleapis.com. (40)
01:32:11.393262 IP 192.168.0.42.56874 > 168.192.63.2.53: 58698+ AAAA? graph.facebook.com. (36)
01:32:11.394583 IP 192.168.0.42.46356 > 168.192.63.1.53: 621+ AAAA? graph.facebook.com. (36)
01:32:13.104681 IP 192.168.0.42.34892 > 168.192.63.2.53: 65295+ AAAA? android.googleapis.com. (40)
01:32:14.396364 IP 192.168.0.42.60954 > 8.8.8.8.53: 58698+ AAAA? graph.facebook.com. (36)
01:32:14.435879 IP 8.8.8.8.53 > 192.168.0.42.60954: 58698 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., AAAA 2a03:2880:f00d:201:face:b00c:0:1 (106)
01:32:14.436050 IP 192.168.0.42.34296 > 168.192.63.1.53: 11140+ A? graph.facebook.com. (36)
01:32:16.107775 IP 192.168.0.42.39911 > 8.8.8.8.53: 65295+ AAAA? android.googleapis.com. (40)
01:32:16.172365 IP 192.168.0.42.56985 > 168.192.63.2.53: 39674+ A? android.googleapis.com. (40)
01:32:16.194359 IP 8.8.8.8.53 > 192.168.0.42.39911: 65295 2/0/0 CNAME googleapis.l.google.com., AAAA 2404:6800:4005:c00::5f (102)
01:32:16.194597 IP 192.168.0.42.57761 > 168.192.63.1.53: 6690+ A? android.googleapis.com. (40)
01:32:16.399686 IP 192.168.0.42.47470 > 168.192.63.2.53: 621+ AAAA? graph.facebook.com. (36)
01:32:19.173140 IP 192.168.0.42.37804 > 8.8.8.8.53: 39674+ A? android.googleapis.com. (40)
01:32:19.216700 IP 8.8.8.8.53 > 192.168.0.42.37804: 39674 2/0/0 CNAME googleapis.l.google.com., A 74.125.128.95 (90)
01:32:19.216866 IP 192.168.0.42.47777 > 168.192.63.1.53: 50274+ A? android.googleapis.com. (40)
01:32:19.402783 IP 192.168.0.42.42060 > 8.8.8.8.53: 621+ AAAA? graph.facebook.com. (36)
01:32:19.441153 IP 192.168.0.42.52883 > 168.192.63.2.53: 11140+ A? graph.facebook.com. (36)
01:32:19.488067 IP 8.8.8.8.53 > 192.168.0.42.42060: 621 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., AAAA 2a03:2880:f00d:201:face:b00c:0:1 (106)
01:32:19.488125 IP 192.168.0.42.45288 > 168.192.63.1.53: 5500+ A? graph.facebook.com. (36)
01:32:21.199654 IP 192.168.0.42.41021 > 168.192.63.2.53: 6690+ A? android.googleapis.com. (40)
01:32:22.444272 IP 192.168.0.42.45748 > 8.8.8.8.53: 11140+ A? graph.facebook.com. (36)
01:32:22.530284 IP 8.8.8.8.53 > 192.168.0.42.45748: 11140 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., A 31.13.70.17 (94)
01:32:22.530422 IP 192.168.0.42.55923 > 168.192.63.1.53: 51500+ A? graph.facebook.com. (36)
01:32:24.201216 IP 192.168.0.42.58262 > 8.8.8.8.53: 6690+ A? android.googleapis.com. (40)
01:32:24.221210 IP 192.168.0.42.37004 > 168.192.63.2.53: 50274+ A? android.googleapis.com. (40)
01:32:24.265064 IP 8.8.8.8.53 > 192.168.0.42.58262: 6690 2/0/0 CNAME googleapis.l.google.com., A 74.125.128.95 (90)
01:32:24.489189 IP 192.168.0.42.56689 > 168.192.63.2.53: 5500+ A? graph.facebook.com. (36)
01:32:27.224295 IP 192.168.0.42.60766 > 8.8.8.8.53: 50274+ A? android.googleapis.com. (40)
01:32:27.307725 IP 8.8.8.8.53 > 192.168.0.42.60766: 50274 2/0/0 CNAME googleapis.l.google.com., A 74.125.128.95 (90)
01:32:27.489703 IP 192.168.0.42.51945 > 8.8.8.8.53: 5500+ A? graph.facebook.com. (36)
01:32:27.535515 IP 192.168.0.42.58775 > 168.192.63.2.53: 51500+ A? graph.facebook.com. (36)
01:32:27.552315 IP 8.8.8.8.53 > 192.168.0.42.51945: 5500 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., A 31.13.70.17 (94)
01:32:30.538616 IP 192.168.0.42.52621 > 8.8.8.8.53: 51500+ A? graph.facebook.com. (36)
01:32:30.602095 IP 8.8.8.8.53 > 192.168.0.42.52621: 51500 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., A 31.13.70.17 (94)
01:32:51.300335 IP 192.168.0.42.49435 > 168.192.63.1.53: 22301+ A? daisy.ubuntu.com. (34)
01:32:56.303131 IP 192.168.0.42.44637 > 168.192.63.2.53: 22301+ A? daisy.ubuntu.com. (34)
01:32:59.306211 IP 192.168.0.42.43434 > 8.8.8.8.53: 22301+ A? daisy.ubuntu.com. (34)
01:32:59.368790 IP 8.8.8.8.53 > 192.168.0.42.43434: 22301 2/0/0 A 91.189.95.55, A 91.189.95.54 (66)
01:33:08.602647 IP 192.168.0.42.36288 > 168.192.63.1.53: 50367+ AAAA? graph.facebook.com. (36)
01:33:13.607749 IP 192.168.0.42.60232 > 168.192.63.2.53: 50367+ AAAA? graph.facebook.com. (36)
01:33:16.610850 IP 192.168.0.42.49129 > 8.8.8.8.53: 50367+ AAAA? graph.facebook.com. (36)
01:33:16.694071 IP 8.8.8.8.53 > 192.168.0.42.49129: 50367 3/0/0 CNAME api.facebook.com., CNAME star.c10r.facebook.com., AAAA 2a03:2880:f00d:201:face:b00c:0:1 (106)
01:33:16.694239 IP 192.168.0.42.49356 > 168.192.63.1.53: 64028+ A? graph.facebook.com. (36)
01:33:21.699342 IP 192.168.0.42.35342 > 168.192.63.2.53: 64028+ A? graph.facebook.com. (36)
dgkim의 이미지

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/

sitan81의 이미지

> IP 주소를 일부로 192.168.0.42로 바꾸신 것으로 생각하고 dns 서버는 바꾸지 않은 것으로 생각합니다.

제가 이부분을 누락하고 설명 드리지 못했네요
서버의 ip를 그대로 노출되는것이 어떠한지 알수 없어서 바꾸었습니다.

역시 고수분이시라 단번에 눈치 채주시는군요
누락된 설명 죄송합니다.

말씀해주신대로 네임서버의 주소를
168.192.63.1 -> 168.126.63.1 변경하니 잘 작동하고 있습니다.

수정은
http://nokia.egloos.com/9651836

위의 사이트의 도움을 받았습니다.

정말 정말 감사드립니다!!

계속 안고가야 할 문제를 풀어내어 주신것 같아 너무나 너무나 감사드립니다!

dgkim의 이미지

thread dump를 수행하면, tomcat에서 처리중인 상황을 볼 수 있습니다.

tomcat process에 대하여 kill -3 명령으로 만들 수 있습니다.

아래와 같이.

dgkim@dgkim:~$ ps -ef | grep java
tomcat   21930     1  0 Aug29 ?        11:14:32 /home/shared/app/sun/java/jdk1.6.0_38/bin/java -Djava.util.logging.config.file=/home/tomcat/app/apache/apache-tomcat-6.0.36/conf/logging.properties -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -XX:MaxPermSize=256m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/tomcat/app/apache/apache-tomcat-6.0.36/endorsed -classpath /home/tomcat/app/apache/apache-tomcat-6.0.36/bin/bootstrap.jar -Dcatalina.base=/home/tomcat/app/apache/apache-tomcat-6.0.36 -Dcatalina.home=/home/tomcat/app/apache/apache-tomcat-6.0.36 -Djava.io.tmpdir=/home/tomcat/app/apache/apache-tomcat-6.0.36/temp org.apache.catalina.startup.Bootstrap start
dgkim    31256 31141  0 15:51 pts/1    00:00:00 grep --color=auto java
dgkim@dgkim:~$ kill -3 21930

kill -3 명령은 kill 명령과 같이 프로세스를 내리는 것이 아니라, -3이란 시그널을 보내고, java에서는 -3 시그널을 받으면 thead dump를 생성합니다.

thread dump라고 생성된 내역은 catalina.out 파일에 덧붙여 집니다.

--
http://www.dgkim.net/

sitan81의 이미지

성의껏 답변 주셔서 감사합니다.

첫 서버를 우분투로 선택하고 시작한지 1개월이 된 저로서는
스레드 덤프로 무엇을 할수 있는지는 정확히 잘 인지 못하고 있습니다.

catalina.out 파일이 엄청 자세히(??) 보인다는 느낌을 받았습니다.

thread dump 생성을 끄는 방법은 무엇인지 알수 있을까요?

감사합니다.

dgkim의 이미지

kill -3 수행한 시점에만 한번 발생하는 것입니다.

--
http://www.dgkim.net/

sitan81의 이미지

전 꺼야 하는줄 알고 여기 저기 서칭을 하다가

kill -quit 라는 명령어를 날렸었습니다..

문제는... 없을까요??

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.