서비스 응답속도 저하시 php-fpm 로그로 원인분석하기
php-fpm 기반의 웹 서비스에서 알 수 없는 문제로 응답속도가 저하되는 현상이 발생 할 경우가 종종 있다.
원인은 여러가지일 수 있다. 몇 가지를 꼽자면,
- DBMS의 SQL 응답속도 저하 (Slow Query)
- 네트워크 지연
- 서버 리소스 점유율 (CPU, RAM 등)
- Disk 입출력 문제
등이 있다.
하지만, 서버 리소스나 네트워크에 별 다른 문제가 없고, Slow Query 로그에도 별다른 이상징후가 없다면,
원인분석을 해야 하는데, 이 경우 Web Application에서 어느 로직에서 문제가 발생하는지 원인을 찾아야 한다.
개발환경이라면 Xdebug를 활용 수 있겠지만, 실 서비스 중인 서버에는 적용할 수 없는 방법이다.
이 때는 php-fpm의 slowlog를 찍어서 확인하는 방법이 있다.
php-fpm.conf 파일을 열어보면 아래와 같은 설정을 확인할 수 있다.
......
request_slowlog_timeout = 30s
slowlog = /var/log/php-fpm/slow.log
......
여기서 request_slowlog_timeout을 3~5s 정도로 낮추고, php-fpm 서비스를 재시작한다.
그 후 tail 명령으로 /var/log/php-fpm/slow.log 를 확인 후 응답속도가 느린 페이지에 접속을 계속 시도해보면 다음과 같은 로그가 찍힌다.
[10-Nov-2018 11:30:22] [pool www] pid 8260
script_filename = ******************
[0x00007f1a47de79a8] fopen() ****.php:422
[0x00007f1a47de6500] +++ dump failed
이 로그에는 응답속도 저하의 원인이 되는 파일과 해당 function까지 추적해주기 때문에 원인을 금방 파악할 수 있다.
Ubuntu 18.04에서 네트워크 카드 추가 및 IP 설정하기
Ubuntu 18.04로 버전이 업데이트 되면서 네트워크 카드의 설정을 변경하는 방법도 바뀌었다.
기존에는 /etc/network/interfaces 파일에서 설정을 하였지만, 18.04 버전 부터는 netplan을 통한 설정 방식으로 바뀌었다.
네트워크 카드 추가하기
VirutalBox의 경우 네트워크 카드 하나를 추가하고 다음에 연결됨을 [호스트 전용 어댑터]로 설정한다.
추가된 네트워크 인터페이스 확인
가상머신을 재부팅 한 후, ifconfig -a 명령을 통해 추가된 네트워크 인터페이스를 확인한다.
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe13:c615 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:13:c6:15 txqueuelen 1000 (Ethernet)
RX packets 342 bytes 411198 (411.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 111 bytes 9792 (9.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.100 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::a00:27ff:fe9a:198e prefixlen 64 scopeid 0x20<link>
ether 08:00:27:9a:19:8e txqueuelen 1000 (Ethernet)
RX packets 136 bytes 11940 (11.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 394 bytes 39229 (39.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 120 bytes 8836 (8.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 120 bytes 8836 (8.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
추가된 인터페이스 카드 명이 enp0s8 임을 확인할 수 있다.
고정 IP 설정
Ubuntu 18.04 버전부터는 /etc/netplan/*.yaml 파일을 수정하여야 한다.
가상머신에서 다음 명령을 입력하여 해당 파일을 vi 에디터로 편집한다.
sudo vi /etc/netplan/*.yaml
다음과 같이 ipconfig -a 명령으로 찾은 신규 네트워크 카드 명을 기재하고, IP를 설정해준다.
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp0s3:
addresses: []
dhcp4: true
enp0s8:
addresses: [192.168.56.100/24]
gateway4: 192.168.56.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp4: no
dhcp6: no
version: 2
설정 적용
변경한 설정을 적용하려면 다음 명령을 입력한다.
sudo netplan apply
Recent Comments