私はブログをホストするためにDigitaloceanでUbuntu 14.04を実行しています。私はHHVM + nginx + MySQLを使用しています。数時間(〜12時間)ごとにRAMが残っておらず、nginxで502エラーが発生します。
過去10分間のメモリ使用量を確認しましたが、free -m
次のような結果が出ました。
total used free shared buffers cached
Mem: 994 714 279 29 20 235
-/+ buffers/cache: 458 535
Swap: 0 0 0
total used free shared buffers cached
Mem: 994 715 278 29 20 235
-/+ buffers/cache: 459 534
Swap: 0 0 0
total used free shared buffers cached
Mem: 994 722 271 29 20 240
-/+ buffers/cache: 461 532
Swap: 0 0 0
total used free shared buffers cached
Mem: 994 729 264 29 20 240
-/+ buffers/cache: 469 524
Swap: 0 0 0
total used free shared buffers cached
Mem: 994 725 268 29 20 240
-/+ buffers/cache: 464 529
Swap: 0 0 0
それでは、どのようにメモリリークが発生しているのかをどうやって知ることができますか?
出力htop
:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
2107 root 20 0 26284 2528 1408 R 0.7 0.2 0:00.47 htop
1002 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:00.99 /usr/sbin/mysqld
1088 redis 20 0 36996 7256 876 S 0.0 0.7 0:06.46 /usr/bin/redis-server 127.0.0.1:6379
925 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:17.87 /usr/sbin/mysqld
949 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:00.21 /usr/sbin/mysqld
1 root 20 0 33492 2768 1400 S 0.0 0.3 0:01.30 /sbin/init
343 root 20 0 19608 648 460 S 0.0 0.1 0:00.12 upstart-udev-bridge --daemon
351 messagebu 20 0 39228 1292 884 S 0.0 0.1 0:00.07 dbus-daemon --system --fork
354 root 20 0 51476 1552 952 S 0.0 0.2 0:00.05 /lib/systemd/systemd-udevd --daemon
399 root 20 0 43452 1756 1396 S 0.0 0.2 0:00.00 /lib/systemd/systemd-logind
427 syslog 20 0 249M 1388 788 S 0.0 0.1 0:00.01 rsyslogd
428 syslog 20 0 249M 1388 788 S 0.0 0.1 0:00.00 rsyslogd
429 syslog 20 0 249M 1388 788 S 0.0 0.1 0:00.02 rsyslogd
426 syslog 20 0 249M 1388 788 S 0.0 0.1 0:00.03 rsyslogd
452 root 20 0 15408 648 320 S 0.0 0.1 0:00.05 upstart-file-bridge --daemon
672 root 20 0 15392 692 332 S 0.0 0.1 0:00.05 upstart-socket-bridge --daemon
810 root 20 0 15820 928 768 S 0.0 0.1 0:00.00 /sbin/getty -8 38400 tty4
816 root 20 0 15820 928 768 S 0.0 0.1 0:00.00 /sbin/getty -8 38400 tty5
821 root 20 0 15820 932 768 S 0.0 0.1 0:00.00 /sbin/getty -8 38400 tty2
822 root 20 0 15820 924 768 S 0.0 0.1 0:00.00 /sbin/getty -8 38400 tty3
825 root 20 0 15820 932 768 S 0.0 0.1 0:00.00 /sbin/getty -8 38400 tty6
855 root 20 0 61364 3008 2328 S 0.0 0.3 0:00.03 /usr/sbin/sshd -D
858 root 20 0 4368 656 512 S 0.0 0.1 0:00.00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
859 root 20 0 23656 1024 768 S 0.0 0.1 0:00.03 cron
861 daemon 20 0 19140 160 0 S 0.0 0.0 0:00.00 atd
894 whoopsie 20 0 327M 3584 2424 S 0.0 0.4 0:00.00 whoopsie
896 whoopsie 20 0 327M 3584 2424 S 0.0 0.4 0:00.00 whoopsie
873 whoopsie 20 0 327M 3584 2424 S 0.0 0.4 0:00.00 whoopsie
1170 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:00.59 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1357 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:23.19 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1437 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:12.09 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1438 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:19.50 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1439 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:14.87 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1440 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:14.93 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1441 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:13.68 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1442 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:11.29 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1443 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:16.50 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
1444 www-data 20 0 1541M 390M 91108 S 0.0 39.3 0:17.66 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
916 www-data 20 0 1541M 390M 91108 S 0.0 39.3 2:25.37 /usr/bin/hhvm --config /etc/hhvm/php.ini --config /etc/hhvm/server.ini --user www-data --mode daemo
945 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:00.18 /usr/sbin/mysqld
946 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:00.73 /usr/sbin/mysqld
947 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:00.23 /usr/sbin/mysqld
948 mysql 20 0 737M 72680 7332 S 0.0 7.1 0:00.22 /usr/sbin/mysqld
950 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.26 /usr/sbin/mysqld
951 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.23 /usr/sbin/mysqld
952 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.21 /usr/sbin/mysqld
955 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.19 /usr/sbin/mysqld
956 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.17 /usr/sbin/mysqld
1003 mysql 20 0 737M 66360 7332 S 0.7 6.5 0:01.61 /usr/sbin/mysqld
1004 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.10 /usr/sbin/mysqld
1005 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.00 /usr/sbin/mysqld
1168 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:00.00 /usr/sbin/mysqld
1173 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:03.08 /usr/sbin/mysqld
1202 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:03.37 /usr/sbin/mysqld
1445 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:02.37 /usr/sbin/mysqld
1446 mysql 20 0 737M 66360 7332 S 0.0 6.5 0:03.37 /usr/sbin/mysqld
957 memcache 20 0 357M 42368 876 S 0.0 4.2 0:00.96 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
958 memcache 20 0 357M 42368 876 S 0.0 4.2 0:00.97 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
959 memcache 20 0 357M 42368 876 S 0.0 4.2 0:00.91 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
960 memcache 20 0 357M 42368 876 S 0.0 4.2 0:00.94 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
961 memcache 20 0 357M 42368 876 S 0.0 4.2 0:00.00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
941 memcache 20 0 357M 42368 876 S 0.0 4.2 0:04.53 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
962 root 20 0 90268 1440 228 S 0.0 0.1 0:00.00 nginx: master process /usr/sbin/nginx
963 www-data 20 0 91172 2840 1072 S 0.0 0.3 0:01.47 nginx: worker process
1064 root 20 0 25344 1556 1276 S 0.0 0.2 0:00.04 /usr/lib/postfix/master
1069 postfix 20 0 27460 1516 1232 S 0.0 0.1 0:00.00 qmgr -l -t unix -u
1091 redis 20 0 36996 7256 876 S 0.0 0.7 0:00.00 /usr/bin/redis-server 127.0.0.1:6379
1092 redis 20 0 36996 7256 876 S 0.0 0.7 0:00.00 /usr/bin/redis-server 127.0.0.1:6379
1151 root 20 0 15820 932 768 S 0.0 0.1 0:00.01 /sbin/getty -8 38400 tty1
1859 postfix 20 0 27408 1488 1212 S 0.0 0.1 0:00.00 pickup -l -t unix -u -c
1984 root 20 0 103M 4220 3224 S 0.0 0.4 0:00.11 sshd: root@pts/0
2054 root 20 0 22764 3876 1676 S 0.0 0.4 0:00.05 -bash
答え1
ご提供いただいた情報には見どころが多くありません。free -m
ただメモリの半分程度しか使用していないことを示しました。これが実際の問題であることを確認するために、HHVMとnginxのログをチェックしましたか?
30秒(またはそれ以上)ごとにps auxの出力をファイルに追加するこのような小さなスクリプトを作成できます。しばらくの間バックグラウンドで実行し、後でメモリ出力を分析します。ファイルにさまざまなUNIXツールを使用し、後で出力して分析の良い機会を得ることができると思います。
スクリプトは次のとおりです。
while [ true ]
do
printf "\n\n" >> /root/psaux_analysis
echo "--------------------------------------" >> /root/psaux_analysis
date >> /root/psaux_analysis
echo "--------------------------------------" >> /root/psaux_analysis
printf "\n" >> /root/psaux_analysis
ps aux >> /root/psaux_analysis
sleep 30;
done
これにより、次のような出力が提供されます。
--------------------------------------
Mon Jun 16 07:44:03 UTC 2014
--------------------------------------
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2028 584 ? Ss Mar12 1:08 init [2]
root 2 0.0 0.0 0 0 ? S Mar12 0:00 [kthreadd/146]
root 3 0.0 0.0 0 0 ? S Mar12 0:00 [khelper/146]
daemon 313 0.0 0.0 1804 512 ? Ss Mar12 0:00 /sbin/portmap
daemon 528 0.0 0.0 2156 304 ? Ss Mar12 0:00 /usr/sbin/atd
104 551 0.0 0.0 2580 240 ? Ss Mar12 0:00 /usr/bin/dbus-daemon --system
root 560 0.0 0.0 2288 732 ? Ss Mar12 0:28 /usr/sbin/cron
root 727 0.0 0.0 29576 4128 ? Sl Mar12 38:12 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
...