Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Memcache Manager

branch: master
README.markdown

Introduction

PHP Classes & Examples for both Memcache & Memcached modules. Source code includes Sample Reports as well as Documentation. Currently tested to work with memcached 1.4.3 & pecl extension 2.2.5.

Our Memcached Class now supports key tagging !!! Add by key, delete by key, search by key, use namespacing... whatever... you're the boss ;)

Also, if you have not already checked it out, we have a sweet tool to generate a report on your Memcached memory usage. See our Sample Report !

http://www.manifestinteractive.com/usenet/memcached/reports/report_sample.html

This project will host PHP Classes & Examples for both Memcache & Memcached modules. Source code includes Sample Reports as well as Documentation. Currently tested to work with memcached 1.4.3 & pecl extension 2.2.5.

Details

My efforts are to make it easier to "visualize" our Memcache servers. I would love to hear your thoughts on ways this might be achieved. So far I am focusing on:

  • Showing Visual Graphs with Memory Usage
  • Highlighting Potential Problems that may need to be addressed
  • Still leaving room for your own customizations
  • I look forward to any feedback you have and am happy to work in any worthwhile features you may want added.

Known Issue with PECL 2.2.5 & Memcached 1.4.3

There is a known issue that might cause some headaches for some people. Fortunately Harv over at php.net has already worked out a solution. If you are running Memcached 1.4.3 with the PECL extension 2.2.5, you will not be able to delete a key. If you did a var_dump(debug_backtrace()); you would see an error that reads CLIENT_ERROR bad command line format. Usage: delete [noreply].

To fix this, search for a file named memcache.c and go to line 1494 and in the mmc_delete() function replace:

command_len = spprintf(&command, 0, "delete %s %d", key, time);

with

command_len = spprintf(&command, 0, "delete %s", key);

Once you have saved the file... just recompile, restart apache, and you are good to go.

Here is the Original Thread where I found the fix from Harv.

Hope this helps somebody like it helped me.

Definitions

In case you have had a rough time trying to wrap your head around what some of the variables are actually for... here is a comprehensive list to the resources where we discovered this information. Hope this helps!

While you are reading these statistical definitions... keep in mind that the most useful statistics from those given here are the number of cache hits, misses, and evictions.

A large number of get_misses may just be an indication that the cache is still being populated with information. The number should, over time, decrease in comparison to the number of cache get_hits. If, however, you have a large number of cache misses compared to cache hits after an extended period of execution, it may be an indication that the size of the cache is too small and you either need to increase the total memory size, or increase the number of the memcached instances to improve the hit ratio.

A large number of evictions from the cache, particularly in comparison to the number of items stored is a sign that your cache is too small to hold the amount of information that you regularly want to keep cached. Instead of items being retained in the cache, items are being evicted to make way for new items keeping the turnover of items in the cache high, reducing the efficiency of the cache.

Sample Statistics Output

Array
(
    [localhost:11211] => Array
        (
            [pid] => 24187
            [uptime] => 135454
            [time] => 1258121472
            [version] => 1.4.3
            [pointer_size] => 32
            [rusage_user] => 0.537918
            [rusage_system] => 1.757732
            [curr_connections] => 8
            [total_connections] => 1874
            [connection_structures] => 57
            [cmd_get] => 16287
            [cmd_set] => 7223
            [cmd_flush] => 33
            [get_hits] => 9940
            [get_misses] => 6347
            [delete_misses] => 0
            [delete_hits] => 0
            [incr_misses] => 0
            [incr_hits] => 1
            [decr_misses] => 0
            [decr_hits] => 1
            [cas_misses] => 0
            [cas_hits] => 0
            [cas_badval] => 0
            [bytes_read] => 234200204
            [bytes_written] => 272407668
            [limit_maxbytes] => 134217728
            [accepting_conns] => 1
            [listen_disabled_num] => 0
            [threads] => 4
            [conn_yields] => 0
            [bytes] => 59464725
            [curr_items] => 3430
            [total_items] => 7145
            [evictions] => 0
        )

    [localhost:11212] => Array
        (
            [pid] => 24226
            [uptime] => 135451
            [time] => 1258121472
            [version] => 1.4.3
            [pointer_size] => 32
            [rusage_user] => 0.131979
            [rusage_system] => 0.821875
            [curr_connections] => 5
            [total_connections] => 651
            [connection_structures] => 7
            [cmd_get] => 121
            [cmd_set] => 56
            [cmd_flush] => 0
            [get_hits] => 116
            [get_misses] => 5
            [delete_misses] => 0
            [delete_hits] => 2
            [incr_misses] => 0
            [incr_hits] => 52
            [decr_misses] => 0
            [decr_hits] => 52
            [cas_misses] => 0
            [cas_hits] => 0
            [cas_badval] => 0
            [bytes_read] => 11672
            [bytes_written] => 445678
            [limit_maxbytes] => 134217728
            [accepting_conns] => 1
            [listen_disabled_num] => 0
            [threads] => 4
            [conn_yields] => 0
            [bytes] => 453
            [curr_items] => 2
            [total_items] => 49
            [evictions] => 0
        )

    [localhost:11213] => Array
        (
            [pid] => 24280
            [uptime] => 135447
            [time] => 1258121471
            [version] => 1.4.3
            [pointer_size] => 32
            [rusage_user] => 0.156976
            [rusage_system] => 0.249962
            [curr_connections] => 5
            [total_connections] => 626
            [connection_structures] => 8
            [cmd_get] => 0
            [cmd_set] => 14
            [cmd_flush] => 0
            [get_hits] => 0
            [get_misses] => 0
            [delete_misses] => 0
            [delete_hits] => 0
            [incr_misses] => 0
            [incr_hits] => 0
            [decr_misses] => 0
            [decr_hits] => 0
            [cas_misses] => 0
            [cas_hits] => 0
            [cas_badval] => 0
            [bytes_read] => 9738
            [bytes_written] => 444431
            [limit_maxbytes] => 134217728
            [accepting_conns] => 1
            [listen_disabled_num] => 0
            [threads] => 4
            [conn_yields] => 0
            [bytes] => 394
            [curr_items] => 1
            [total_items] => 1
            [evictions] => 0
        )

)

Server Statistics

accepting_conns Accepting Connections   1 or 0 to indicate whether the server is currently accepting connections or not.
version         Memcache Version        Version string of this instance.
pid             Process ID              Process id of the memcached instance.
pointer_size    Pointer Size            Size of pointers for this host specified in bits (32 or 64).
threads         Threads                 Number of worker threads requested.
rusage_system   System CPU Usage        Total system time for this instance (seconds:microseconds).
rusage_user     User CPU Usage          Total user time for this instance (seconds:microseconds).
time            Time                    Current time (as epoch).
uptime          Uptime                  Uptime for this memcached instance (seconds:microseconds).

To get the start time for your service, just subtract time from uptime (uptime-time).

Memory Usage

limit_maxbytes  Memory Allocation       Number of bytes this server is allowed to use for storage.
bytes           Memory In Use           Current number of bytes used by this server to store items.
bytes_read      Total Read Memory       Total number of bytes read by this server from network.
bytes_written   Total Written Memory    Total number of bytes sent by this server to network.

To get available memory, just subtract bytes from limit_maxbytes (limit_maxbytes-bytes).

Connection Information

curr_connections        Current Connections     Current number of open connections.
total_connections       Total Connections       Total number of connections opened since the server started running.
conn_yields             Connection Yields       Number of yields for connections.
connection_structures   Connection Structures   Number of connection structures allocated by the server.

Still not 100% sure what connection_structures or conn_yields are... Anyone?

Memcache Statistics

listen_disabled_num Listeners Disabled  The number of times socket listeners were disabled due to hitting the connection limit.
evictions           Evections           Number of valid items removed from cache to free memory for new items.
cmd_flush           CMD Flush Used      Total number of flush requests.
cmd_get             CMD Get Used        Total number of retrieval requests.
cmd_set             CMD Set Used        Total number of storage requests.
cas_badval          CAS Bad Value       Number of keys that have been compared and swapped, but the comparison (original) value did not match the supplied value.
cas_hits            CAS Hits            Number of keys that have been compared and swapped and found present.
cas_misses          CAS Misses          Number of items that have been compared and swapped and not found.
get_hits            Get Hits            Number of keys that have been requested and found present.
get_misses          Get Misses          Number of items that have been requested and not found.
delete_hits         Delete Hits         Number of keys that have been deleted and found present.
delete_misses       Delete Misses       Number of items that have been delete and not found.
incr_hits           Increment Hits      Number of keys that have been incremented and found present.
incr_misses         Increment Misses    Number of items that have been incremented and not found.
decr_hits           Decrement Hits      Number of keys that have been decremented and found present.
decr_misses         Decrement Misses    Number of items that have been decremented and not found.

Pretty much anything that is a miss can be bad. Evictions can be bad too. Read the notes above for more info.

Item Information

curr_items   Current Items   Current number of items stored by this instance.
total_items  Total Items     Total number of items stored during the life of this instance.

And that does it... for this version of Memcached anyway (1.4.3)

Something went wrong with that request. Please try again.