How to Check Memcached Total Memory Usage via Command Line and PHP Script


1 views

When working with Memcached in production environments, monitoring memory usage is crucial for capacity planning and performance optimization. The system provides several ways to check memory allocation and consumption.

The most straightforward way is using the stats command in telnet/nc:

telnet localhost 11211
stats

Look for these key metrics in the output:

STAT limit_maxbytes 67108864
STAT bytes 48276321

Where limit_maxbytes shows total allocated memory and bytes indicates current usage.

For programmatic access, here's a complete PHP solution:

<?php
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);

$stats = $memcached->getStats();
$totalMemory = $stats['limit_maxbytes'];
$usedMemory = $stats['bytes'];
$usagePercentage = round(($usedMemory/$totalMemory)*100, 2);

echo "Total allocated: " . formatBytes($totalMemory) . "\n";
echo "Currently used: " . formatBytes($usedMemory) . "\n";
echo "Usage: {$usagePercentage}%\n";

function formatBytes($bytes) {
    $units = ['B', 'KB', 'MB', 'GB'];
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
    $bytes /= (1 << (10 * $pow));
    return round($bytes, 2) . ' ' . $units[$pow];
}
?>

For enterprise environments, consider these approaches:

  • Implement Nagios/Icinga checks using the above PHP script
  • Use Memcached's stats slabs command for granular memory breakdown
  • Set up automated alerts when usage exceeds 85% threshold

Be aware that:

  • Memory fragmentation affects actual usable space
  • Evicted items aren't reflected in byte counts
  • Different Memcached versions report stats slightly differently

When working with Memcached, monitoring memory usage is crucial for performance optimization and capacity planning. Here are the most effective ways to check the total memory allocation.

The easiest way is using the stats command in the Memcached telnet interface:

telnet localhost 11211
stats

Look for these key metrics in the output:

STAT limit_maxbytes 67108864
STAT bytes 48234521

Where limit_maxbytes shows total allocated memory and bytes shows current usage.

For programmatic access in PHP, use the Memcached extension:

$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
$stats = $memcached->getStats();

echo "Total memory allocated: " . $stats['limit_maxbytes'] . " bytes\n";
echo "Memory used: " . $stats['bytes'] . " bytes\n";
echo "Usage percentage: " . 
     round(($stats['bytes']/$stats['limit_maxbytes'])*100, 2) . "%\n";

The memcached-tool utility provides a more readable output:

memcached-tool localhost:11211 display

Sample output shows memory usage per slab alongside totals.

For production environments, consider this Python monitoring script:

import memcache
mc = memcache.Client(['localhost:11211'])
stats = mc.get_stats()[0][1]

print(f"Memory Usage: {int(stats['bytes'])/1024/1024:.2f} MB of "
      f"{int(stats['limit_maxbytes'])/1024/1024:.2f} MB")

Key thresholds to watch:

  • >80% usage: Consider increasing memory or optimizing data
  • >90% usage: Immediate action required to prevent evictions
  • Consistent 100% usage: Memcached is constantly evicting items