自作した PHP アプリが Amazon Linux 2 でメモリリークしているようです。
php
1<?php 2require_once 'TwistOAuth.phar'; 3(中略) 4$connection = new TwistOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret); 5$count = 3; 6$max_length = 25; 7 8function get_tweet($screen_name){ 9 global $connection, $count, $max_length; 10 $ret = ""; 11 12 try{ 13 $user = $connection->get('statuses/user_timeline', 14 array('screen_name' => $screen_name, 15 'count' => $count,) 16 ); 17 }catch (TwistException $e){ 18 (中略) 19 unset($user); 20 unset($connection); 21 return $ret; 22 } 23 24# 追記1 25# ここに die(); を入れてみた 26 27 if(!($user[0] && $user[0]->user)){ 28 unset($user); 29 unset($connection); 30 return $ret; 31 } 32 33 $screen_name = $user[0]->user->screen_name; 34 $ret .= $screen_name; 35 foreach($user as $value){ 36 $text = mb_substr($value->text, 0, $max_length, 'UTF-8'); 37 $ret .= $text; 38 } 39 unset($user); 40 unset($connection); 41 42 return $ret; 43} 44 45print(get_tweet("linming")); 46?>
これを cron で 5 分ごとに起動しています。
php ./myphpapp/tweetapp.php > ./www/tweetapp/tweet.html
実行し始めてから 1~2 時間程度経つと、cron のエラーメッセージで Segmentation Fault が出ます。
(一日ぐらい放っておくとウェブサイトにアクセスできなくなります。)
CloudWatch Agent を入れてメモリ使用量を確認すると、一回の実行で 50MB ぐらいメモリリークしているようです。
作ったオブジェクトは解放しているつもりですが、どこでメモリリークしているのでしょうか?
PHP のバージョンは 7.1.33、Apache のバージョンは 2.4.34 です。
EC2 のインスタンスは t2.micro です。
不思議なのは、このプログラムを別のクラウド環境(GMO の ALTUS)でも動かしているのですが、半年以上 Apache や OS のリスタートをしなくても正常に動作しています。
ご知見のある方、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/28 07:54 編集
2020/05/28 07:57
2020/05/28 08:22
2020/05/28 08:53
2020/05/28 09:02
2020/05/28 09:03
2020/05/28 09:08
2020/05/28 09:10
2020/05/28 09:18
2020/05/29 00:49
2020/05/29 00:52
2020/05/29 00:58
2020/05/29 02:02
2020/05/29 02:31
2020/05/29 02:44
2020/05/29 04:00
2020/05/29 04:27
2020/05/29 07:46
2020/05/29 08:43
2020/05/29 09:04
2020/05/29 09:38
2020/05/29 10:37