Drupal Slowdowns and the captcha_placement_map_cache Variable

So I was troubleshooting Anthrocon's website the other night, trying to figure out why pages were taking a few seconds to load, but used to be much quicker. While digging around, I saw that the filecache directory was over a Gigabyte in size. So I cleared the cache, and saw that it was still several megs in size, which struck me as odd.

Looking in the cache/ directory, I saw that the file that held the cached copy of the system variables was over 5 Megabytes in size. Definitely not normal. My next step was to check the variables table, and look what I found:

mysql> SELECT name, LENGTH(value) AS len FROM variable WHERE name LIKE 'captcha_placement%';
+-----------------------------+---------+
| name                        | len     |
+-----------------------------+---------+
| captcha_placement_map_cache | 5155086 |
+-----------------------------+---------+

It seems that for reasons I don't understand, the "captcha_placement_map_cache" variable from the CATPCHA module grows without bound. In our case, it was well over 5 Megs. This means that on every page load, a 5 Megabyte file was being read into memory and deseralized. While the filesystem cache kept the disk from getting hammered, the CPU still had to do the same work over and over.

The good news is that I could delete that variable with no ill effects, and the entire website suddenly became much more responsive. Here's a CPU graph:

drupal cpu load annotated

I'm unclear as to what's happening in the captcha module. I think my long-term solution will be to modify my DDT module to just delete that variable once it exceeds 10 K. That will keep this from ever bothering us again.

3.333335
Average: 3.3 (6 votes)
Your rating: None