概要
短い推奨事項(詳細な情報から、回答を参照)
メモリリークを回避するには、次の方法があります。
質問
ライブラリと変数を除いて、どのphpがメモリを使用できるのですか?次のコードを使用して、変数とその約3Mbで使用されるメモリを監視します。
$vars = array_keys(get_defined_vars());
$cnt_vars = count($vars);
$allsize = 0;
for ($j = 0; $j < $cnt_vars; $j++) {
try
{
$size = @serialize($$vars[$j]);
$size = strlen($size);
}
catch(Exception $e){
$str = json_encode($$vars[$j]);
$str = str_replace(array('{"','"}','":"','":'), '', $str);
$size = strlen($str);
}
$vars[$j] = array(
'size' => $size,
'name' => $vars[$j]
);
$allsize += $size;
}
とライブラリは〜18Mb(libcurlなど)を必要としますので、合計21Mbですが、
pmap -x(プロセス)は、総メモリ消費量がkBであることを示しています:314028 RSS:74704ダーティ:59672
したがって、実際の総消費量は約74Mbです。また、pmapに[anon]マッピングのある大きなブロックがいくつかあります。このブロックを使用しているPHPは何ですか。
PHPバージョン:5.5.9-1ubuntu4.14 PHP拡張:
root@webdep:~# php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mcrypt
mhash
openssl
pcntl
pcre
PDO
pdo_pgsql
pgsql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
注:これは正確には答えではありませんが、OPによって要求された情報ですが、コメントフィールドはこれには短すぎます...これらは、この種の問題をデバッグするためのツールの詳細です。
Xdebugのドキュメントはかなり包括的です。ドキュメントをここにコピーすることで、Xdebugのドキュメントを私ができるよりもはるかに上手に使用する方法がわかるはずです。あなたが与えたスクリプトは少しあいまいなので、私は自分でトレースをしませんでしたが、それはメモリ使用量の行ごとの差分を与えます。
基本的xdebug.show_mem_delta
に1
、Xdebugを有効にしてに設定し、関数トレースを生成します。これをテキストエディターで開いて、メモリリークの原因となっている部分を正確に確認できます。
次に、初期(または中間位置)の合計メモリーを比較して、実際のメモリー使用量とどの程度異なるかを確認できます。
TRACE START [2007-05-06 14:37:26]
0.0003 114112 +114112 -> {main}() ../trace.php:0
ここで総メモリはになり114112
ます。
違いが本当に大きい場合、shell_exec()
すべての行の間で実際のメモリ使用量を取得するようなものを使用してそれを出力し、その出力をXdebugのメモリ出力と比較して、違いがどこで発生しているかを確認できます。
違いがスクリプトの最初の行と異なる場合、原因はPHPの拡張である可能性があります。php -m
魚のような拡張があるかどうかを確認します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加