리눅스 :: 웹 서비스 접속 지연 트러블슈팅 (DNS, curl, DevTools 활용)

2026. 6. 22. 15:51백엔드/리눅스

1. 내 PC 또는 회사망에서 테스트

curl -o /dev/null -s -w \
"DNS:%{time_namelookup}\nConnect:%{time_connect}\nTLS:%{time_appconnect}\nTTFB:%{time_starttransfer}\nTotal:%{time_total}\n" \
<https://도메인/>

 

항목 의미
DNS 높음 DNS/네임서버 문제
Connect 높음 네트워크/방화벽/서버 TCP 응답 지연
TLS 높음 SSL 핸드셰이크 지연
TTFB 높음 웹서버/PHP/DB 처리 지연
Total만 높음 이미지/JS/CSS 등 리소스 용량 문제 가능

 

정리

TTFB가 높으면 서버/PHP/DB,
Total만 높으면 프론트 리소스,
Connect/TLS가 높으면 네트워크/SSL/방화벽 쪽 문제.

 

*참고: Curl 순서

  1. DNS 조회
  2. TCP 연결
  3. SSL 핸드셰이크
  4. 웹 응답(TTFB)

*참고: 조회시

도메인 입력

DNS 조회

IP 획득

TCP 연결

SSL

페이지 로딩

 

<정상>

DNS: 0.01~0.1
Connect: 0.01~0.1
TLS: 0.05~0.3
TTFB: 0.1~1

 

<비정상>

DNS: 11.520
Connect: 11.520
TLS: 0.000
TTFB: 0.000
Total: 12.062

DNS 조회 단계에서 이미 11초 이상 소요되고 있음.

→ 그런데 사진상에는 TLS 가 0 이다 (0.1 도 아니고) 즉,….

“DNS 조회 후 HTTPS 연결 자체가 제대로 성립되지 못한 것” 일 확률이 높다고 판단함.

time nslookup www.xxx.com

→ 여기서 11초 가까이 걸리면 DNS 문제 확정이었으나, 2초로 끝남. 이 문제는 아니었다.

 

그렇다면, “DNS 서버 자체가 불안정한가?”

아래 스크립트를 5회 정도 반복실행하며 비교

for i in {1..5}
do
  dig www.xxx.com | grep "Query time"
done
for i in {1..5}
do
  nslookup www.xxx.com

 

 

→ 결과는 사진처럼 정상 범위였음. 즉, DNS 서버 자체 문제는 아님.

 

그런데, dig 는 정상인데 getent 는 응답이 없었다 !!!

dig www.xxx.com
getent hosts www.xxx.com

DNS 서버 문제가 아닌 리눅스의 이름해석(Name Resolution) 설정 문제

dig/nslookup 명령의 경우: DNS 서버 직접 질의. /etc/nsswitch.conf 영향을 거의 안 받음.

curl/ping/getent 경우: curl → glibc resolver → nsswitch.conf → DNS 순이므로 영향을 받음.

 

그리하여, 아래 조치를 취하여 해결 하였다.

<변경 전>

사이트 접속 → ns1.xxx.co.kr 조회 필요 → ns1.xxx.co.kr IP 조회 → DNS 질의 → 응답

<변경 후>

사이트 접속 → 111.222.333.444 에 직접 질의 → 응답

 

 

원인

1. 네임서버 FQDN 등록 문제 : 자체 조회가 느리거나 실패

ns1.domain.com

ns2.domain.com

2. DNS 순환 참조

domain.comns1.domain.comdomain.com 식으로 DNS를 또 물어봄

3. 특정 DNS 서버 응답 지연

ns1.domain.com

은 살아있는데 A 레코드 조회가 몇 초씩 걸림. IP 직접 입력하면 우회됨.

⇒ 해당 문제로 해결되어 IP를 직접 입력하여 해결 하였다.

 

 


기타 점검 항목

2. 서버에서 부하 확인

top
uptime       # Load Average가 CPU 코어 수보다 높으면 서버 부하 의심.
free -m      # 메모리 부족 + swap 사용 많으면 느려질 수 있음.
df -h        # 디스크 90% 이상이면 위험

→ 확인 결과 부하 문제는 아니었다.

3. 웹 로그 실시간 확인

tail -f /opt/apm/apache/logs/access_log
tail -f /opt/apm/apache/logs/error_log

tail -f /var/log/httpd/access_log
tail -f /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log

→ 접속할 때 로그가 늦게 찍히면 서버 처리 지연 가능성이 큼

4. 느린 요청 찾기

tail -n 1000 /opt/apm/apache/logs/access_log | awk '{print $1,$4,$7,$9,$10}' | tail

5. DB 의심 시

mysqladmin processlist
mysqladmin status
SHOW FULL PROCESSLIST;

→ Sleep 말고 Query가 오래 떠 있으면 DB 병목 가능성

→ 페이지 진입 시점부터 느려지므로 DB 문제는 아니라고 판단 

 

'백엔드 > 리눅스' 카테고리의 다른 글

SMTP 연동 실패 해결방법  (0) 2026.06.29
RAID 복구하기  (0) 2026.06.27
리눅스 :: 파티션과 디스크, 부트로더  (0) 2025.09.12
리눅스 :: 라이선스  (0) 2025.09.12
리눅스 :: 기출문제  (0) 2025.09.11