티스토리 뷰
증상
어느날 갑자기(?) 웹서버에서 홈페이지 로딩하는 속도가 매우매우 느려졌다.
원인 파악
WEB Server 와 DB Server 존재하며,
WEB Server에서 DB Server에 연결하여 데이터를 가져오는 방식이다.
홈페이지가 어느 부분에서 느린지,
각각의 Line 에 runtime 체크를 넣어 어느 부분에서 느려지는 지 먼저 파악하였다.
파악 결과 DB Connection 부분에서 약 5초정도 소요되며,
DB Connection 이 여러개 있을경우 30초넘게 홈페이지가 로딩되지 않은 경우가 발생했다.
DB 서버로 들어가 Show processlist 를 타이핑하여 연결되었는지를 확인해보았다.
mysql> show processlist;
+--------+----------------------+----------------------+---------------+---------+-------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+----------------------+----------------------+---------------+---------+-------+-------+------------------+
| 660834 | root | localhost | pushdevice | Sleep | 23565 | | NULL |
| 660835 | root | localhost | pushdevice | Sleep | 23542 | | NULL |
| 661942 | root | localhost | pushdevice | Sleep | 20259 | | NULL |
| 661952 | root | localhost | pushdevice | Sleep | 20231 | | NULL |
| 661973 | root | localhost | pushdevice | Sleep | 20186 | | NULL |
| 662010 | root | localhost | pushdevice | Sleep | 19704 | | NULL |
| 665774 | root | localhost | pushdevice | Sleep | 10165 | | NULL |
| 665933 | root | localhost | pushdevice | Sleep | 10035 | | NULL |
| 665937 | root | localhost | pushdevice | Sleep | 9993 | | NULL |
| 666106 | root | localhost | pushdevice | Sleep | 9535 | | NULL |
| 668306 | root | localhost | pushdevice | Sleep | 6674 | | NULL |
| 668547 | root | localhost | pushdevice | Sleep | 6234 | | NULL |
| 669845 | root | localhost | pushdevice | Sleep | 3465 | | NULL |
| 669846 | root | localhost | pushdevice | Sleep | 3433 | | NULL |
| 669851 | root | localhost | pushdevice | Sleep | 3385 | | NULL |
| 669852 | root | localhost | pushdevice | Sleep | 3295 | | NULL |
| 670538 | root | localhost | mya2billing | Sleep | 1875 | | NULL |
| 672398 | root | localhost | mya2billing | Sleep | 118 | | NULL |
| 672399 | root | localhost | mya2billing | Sleep | 119 | | NULL |
| 672400 | root | localhost | pushdevice | Sleep | 118 | | NULL |
| 672401 | root | localhost | NULL | Query | 0 | NULL | show processlist |
| 672444 | unauthenticated user | 222.xxxxxxx:43914 | NULL | Connect | NULL | login | NULL |
| 672445 | unauthenticated user | 222.xxxxxxxx:43915 | NULL | Connect | NULL | login | NULL |
+--------+----------------------+----------------------+---------------+---------+-------+-------+------------------+
홈페이지가 30초가량 로딩중일때,
show processlist 를 타이핑해보면 위와같이 [unauthenticated user] 라고 나와있다.
unauthenticated user ?
unauthenticated user 란 연결 요청은 받았지만, ID/PW/DB 등의 추가정보가 없어서 대기중인 연결이다.
위에서 보는 것처럼 User 나 DB 부분이 NULL 로 비어있다.
Why ?
그렇다면 왜 이런 증상이 발생하는가?
Web 서버에서 IP 주소로 DB 서버로 접근한다.
DB 서버에서는 Web 서버의 IP 를 받아 연결을 등록시켜 놓고, 해당 IP 에 대한 DNS Resolving 을 시도한다.
이 과정에서 DB서버에 등록된 DNS 서버 응답이 느리게 될 경우, ID/PW 등 접속정보를 얻어오는 시도도 자연스레 뒤로 밀리게 된다.
어떻게 해결 ?
그렇다면, 이 문제는 어떻게 해결 할 수 있을까?
아래와 같이 3가지 방법이 존재한다.
1. DNS 서버를 변경
- /etc/resolve.conf 에 등록된 DNS 서버를 변경해 본다.
아래는 DNS 서버 리스트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | KT olleh (올레; 구 QOOK(쿡)), KT DNS 기본 DNS 서버 주소 - 168.126.63.1 보조 DNS 서버 주소 - 168.126.63.2 SK Broadband (브로드밴드), SK DNS 기본 DNS 서버 주소 - 210.220.163.82 보조 DNS 서버 주소 - 219.250.36.130 LG U+(유플러스; 구 XPEED 파워콤), LG DNS 기본 DNS 서버 주소 - 164.124.107.9 보조 DNS 서버 주소 - 203.248.242.2 Google Public (구글 퍼블릭) 기본 DNS 서버 주소 - 8.8.8.8 보조 DNS 서버 주소 - 8.8.4.4 |
2. MySQL 의 skip-name-resolve. 기능을 이용하는 방법
- my.cnf 파일에 skip-name-resolve 를 추가하거나, MySQL 을 구동시킬때 skip-name-resolve 플래그를 추가한다.
3. Web 서버의 IP, Domain 을 hosts 에 추가하는 방법
- /etc/hosts 에 자신의 IP 와 Domain 을 추가한다.
ex)
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost
::1 localhost6.localdomain6 localhost6
222.xxx.xxx.xxx www.aaaa.com
'Computer > DataBase' 카테고리의 다른 글
( MySQL ) 쿼리문 csv export (내보내기) (0) | 2017.07.14 |
---|---|
(MySQL) 특정 column에 다른 column 값을 update 하는 방법 (0) | 2017.06.28 |
(MySQL) 특정 DB 백업 및 복구 (0) | 2017.02.02 |
(MySQL) User 삭제하기 (0) | 2017.01.25 |
(MySQL) ERROR 145 (HY000): Table '' is marked as crashed and should be repaired (0) | 2017.01.19 |
- Total
- Today
- Yesterday
- Kotlin
- node.js
- 점유율
- 안드로이드
- 앵커브리핑
- linux
- CentOS
- Asterisk
- Swift
- nodejs
- 뉴스룸
- 배열
- IOS
- 노드
- php
- C
- Node
- 깃헙
- mysql
- 서버
- C언어
- BBC 가쉽
- 스위프트
- git hub
- 손석희
- Android
- GIT
- Phaser
- 리눅스
- xcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |