Magento "Can't get filling percentage" memcached issue
Some Magento store admins report that Magento is returning this exception when using memcached as a backend for either the Magento cache or the Magento Full Page Cache. This issue has its roots in the Zend Framework which returns this exception if memcache fails to return its extended stats.
To resolve this is fairly simple. All you need to do is edit the file [Magento root]/lib/Zend/Cache/Backend/Memcached.php and replace the getFillingPercentage() method with the below:
public function getFillingPercentage()
{
$mems = $this->_memcache->getExtendedStats();
$memSize = null;
$memUsed = null;
foreach ($mems as $key => $mem) {
if ($mem === false) {
$this->_log('can\'t get stat from ' . $key);
continue;
}
$eachSize = $mem['limit_maxbytes'];
$eachUsed = $mem['bytes'];
if ($eachUsed > $eachSize) {
$eachUsed = $eachSize;
}
$memSize += $eachSize;
$memUsed += $eachUsed;
}
if ($memSize === null or $memUsed === null) {
$mem = $this->_memcache->getstats();
if (isset($mem['bytes']) and $mem['limit_maxbytes'] > 0) {
return ((int) (100 * ($mem['bytes'] / $mem['limit_maxbytes'])));
}
} else {
return ((int) (100. * ($memUsed / $memSize)));
}
return 100;
}What exactly does this do?
It will make an additional attempt to get the filling percentage and if it cannot determine the filling percentage then 100 is returned which indicates it is full. In this way there will not be an exception thrown during the temporary periods when filling percentage cannot be determined.
