On Oct 11, 2007, at 14:16 , Randy Wigginton wrote:

I have modified memcached as well as the java client library; with these modifications, and very few lines of code in the application, I can tell precisely how many URLs and SQLs are executing on a particular machine in any given minute or in any given hour. I can tell you the average execution time, the maximum execution time, as well as the number of failures. I can tell you which URLs were expensive, which URLs invoked SQL statements, which urls failed most often. Coupled with a small mysql database, I can give you more operational statistics on our site than many larger sites have available.

I do a similar thing in application with a small amount of java code. If I had to guess, it sounds like you want to do the same kind of thing I'm doing, but in memcached instead of in a server instance.

        Mine has a couple of forms:

        @TimedMethod("blah.doSomething")
        public Something doSomething(...) {
                // expensive stuff
        }

With the above, I automatically get stats that look like this (time units in milliseconds):

blah.doSomething = compstat: count=26345 sum=461399.000000 min=7.000000 avg=17.513722 davg=17.517460 max=1731.000000 stddev=66.180928

You can also directly use the stats and do your own timings within code (or use a simple counter variant).

The counter variant is analogous to incr. Adding a similar data structure to keep running timing stats would be pretty cheap and easy, but I don't know how generally applicable it'd be. You'd lose the general discoverability I rather like, and you'd have to modify your key space to include the origin server somehow.

        How does yours work?

--
Dustin Sallings


Reply via email to