<?php
use PDO;
use Workerman\Worker;
require_once 'Workerman/Autoloader.php';
$w = new Worker();
$w->onWorkerStart = function(){
echo memory_get_usage()."\n";
$set = Config::getItem('db');
$pdo = new PDO(
$set,
$set,
$set,
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("SELECT * FROM orders", );
$stmt->execute(null);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$data = $stmt->fetchAll();
$stmt = null;
echo memory_get_usage()."\n";
unset($data);
echo memory_get_usage()."\n";
};
Worker::runAll();開(kāi)啟服務(wù)前,通過(guò)php a.php status查看進(jìn)程的占用內(nèi)存是4M
查詢了數(shù)據(jù)庫(kù),然后把結(jié)果變量unset了,通過(guò)memory_get_usage()查看內(nèi)存是被釋放了,但是再次php a.php status查看進(jìn)程的占用內(nèi)存是72M
到此我有個(gè)疑問(wèn),為什么進(jìn)程的內(nèi)存沒(méi)有被釋放?
?
workerman里內(nèi)存統(tǒng)計(jì)使用的是?memory_get_usage(true);
你的測(cè)試簡(jiǎn)本里把參數(shù)true加上試下
群大你好,我使用memory_get_usage(true)測(cè)試了,發(fā)現(xiàn)最后輸出的memory_get_usage(true)返回結(jié)果沒(méi)有了memory_get_usage()的變化那么大了;其實(shí)我的問(wèn)題是,我的項(xiàng)目使用了Workerman的Webserver,然而最近發(fā)現(xiàn)進(jìn)程的內(nèi)存不斷的增長(zhǎng),我已經(jīng)確認(rèn)了不是項(xiàng)目里的$GLOBALS全局變量的問(wèn)題,也給PHP安裝了event擴(kuò)展和Linux調(diào)優(yōu)。折騰了很久,才發(fā)現(xiàn)只要查詢數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),進(jìn)程的內(nèi)存就無(wú)法釋放,一開(kāi)始我肯定覺(jué)得是我代碼問(wèn)題,然后我就獨(dú)立的寫(xiě)了一個(gè)demo(就是以上),測(cè)試了發(fā)現(xiàn)資源沒(méi)有被釋放,,,