[support] Problem with Drupals built in cache

Margusja margus at roo.ee
Thu Jan 20 15:42:15 UTC 2011


If I enabled memcache log. I can see lots of:

<33 get xxx_default-cache_content-content%3A930%3A2192
 >33 sending key xxx_default-cache_content-content%3A930%3A2192

I don't remember I had been set any bindings. Is it problem? where it 
takes that prefix xxx?

Tervitades, Margus (Margusja) Roo
+372 51 48 780
http://margus.roo.ee
msn: margusja at kodila.ee
skype: margusja


On 1/20/11 5:32 PM, Margusja wrote:
> In error log there is no problems recorded.
>
> tnx for link. I'll check it out. Maybe it helps me closer to resolve my
> problem.
>
> config lines from settings.php
>           $conf['cache_inc'] = './sites/all/modules/memcache/memcache.inc';
>           $conf['memcache_key_prefix'] = 'seb_default';
>
> Tervitades, Margus (Margusja) Roo
> +372 51 48 780
> http://margus.roo.ee
> msn: margusja at kodila.ee
> skype: margusja
>
>
> On 1/20/11 5:14 PM, Jamie Holly wrote:
>> You got a lot of misses in there. Have you checked your error logs to
>> see if anything is going on? One thing that is possible is that you are
>> hitting the 1mb limit for objects in memcache with the variable cache.
>> This thread has some details on it:
>>
>> http://groups.drupal.org/node/116764
>>
>> Also if you could post your memcache configuration from settings.php to
>> see if anything is going on in there.
>>
>> Jamie Holly
>> http://www.intoxination.net
>> http://www.hollyit.net
>>
>>
>> On 1/20/2011 10:01 AM, Margusja wrote:
>>> Tnx for hints.
>>>
>>> I enabled memcache in my PHP conf. And I think the module is loaded.
>>> [16:50:57 root at arendus ~]# php -i | grep memcache
>>> memcache
>>> memcache support =>    enabled
>>> memcache.allow_failover =>    1 =>    1
>>> memcache.chunk_size =>    32768 =>    32768
>>> memcache.compress_threshold =>    20000 =>    20000
>>> memcache.default_port =>    11211 =>    11211
>>> memcache.hash_function =>    crc32 =>    crc32
>>> memcache.hash_strategy =>    consistent =>    consistent
>>> memcache.lock_timeout =>    15 =>    15
>>> memcache.max_failover_attempts =>    20 =>    20
>>> memcache.protocol =>    ascii =>    ascii
>>> memcache.redundancy =>    1 =>    1
>>> memcache.session_redundancy =>    2 =>    2
>>> Registered save handlers =>    files user memcache
>>>
>>> [16:49:22 root at arendus ~]# echo stats | nc localhost 11211
>>> STAT pid 30211
>>> STAT uptime 23950
>>> STAT time 1295535057
>>> STAT version 1.2.8
>>> STAT pointer_size 32
>>> STAT rusage_user 0.130980
>>> STAT rusage_system 0.311952
>>> STAT curr_items 473
>>> STAT total_items 1763
>>> STAT bytes 587316
>>> STAT curr_connections 10
>>> STAT total_connections 242
>>> STAT connection_structures 15
>>> STAT cmd_flush 0
>>> STAT cmd_get 9007
>>> STAT cmd_set 1763
>>> STAT get_hits 1025
>>> STAT get_misses 7982
>>> STAT evictions 0
>>> STAT bytes_read 11112904
>>> STAT bytes_written 8412213
>>> STAT limit_maxbytes 67108864
>>> STAT threads 5
>>> STAT accepting_conns 1
>>> STAT listen_disabled_num 0
>>> END
>>>
>>> Still in mysqld log:
>>> 110120 16:53:15       4102 Connect    user at localhost on db
>>>                4102 Query       SET NAMES "utf8"
>>>                4102 Query       SELECT 1 FROM access WHERE type = 'host'
>>> AND 'IP' LIKE mask AND status = 0 LIMIT 0, 1
>>>                4102 Query       INSERT INTO semaphore (name, value, expire)
>>> VALUES ('variable_cache_regenerate',
>>> '14419249754d384c5bd38895.47612777', 1295535225.8664)
>>>                4102 Query       SELECT * FROM variable
>>>                4102 Query       DELETE FROM semaphore WHERE name =
>>> 'variable_cache_regenerate' AND value = '14419249754d384c5bd38895.47612777'
>>>                4102 Query       SELECT name, filename, throttle FROM system
>>> WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight
>>> ASC, filename ASC
>>>                4102 Query       SELECT * FROM languages ORDER BY weight
>>> ASC, name ASC
>>>                4102 Query       SELECT dst FROM url_alias LIMIT 0, 1
>>>
>>>
>>>
>>> Tervitades, Margus (Margusja) Roo
>>> +372 51 48 780
>>> http://margus.roo.ee
>>> msn: margusja at kodila.ee
>>> skype: margusja
>>>
>>>
>>> On 1/20/11 4:03 PM, Jamie Holly wrote:
>>>>    Then I would check phpinfo to make sure that the memcache extension is
>>>>    loading into PHP (you can do this from admin ->     reports ->     status and
>>>>    then clicking on your PHP version number).
>>>>
>>>>    If that's showing up ok, you can run a command from the terminal to make
>>>>    sure things are being written/read from memcache:
>>>>
>>>>    echo stats | nc {memcache address} {memcache port}
>>>>
>>>>    Your main things to look at are the hits, misses, bytes and connections.
>>>>
>>>>    There are also some versions of memcache + the PHP extension that don't
>>>>    work well together. This can be a hit and miss thing finding them. I
>>>>    know there was a combination in the CentOS repos a year or so ago that
>>>>    caused problems. Getting the latest version of the PHP extension and
>>>>    building it from source would fix that.
>>>>
>>>>    Jamie Holly
>>>>    http://www.intoxination.net
>>>>    http://www.hollyit.net
>>>>
>>>>
>>>>    On 1/20/2011 8:43 AM, Margusja wrote:
>>>>>    Thx for a replay. I checked again my memcache and I think it works fine.
>>>>>
>>>>>    [15:40:16 root at arendus ~]# telnet localhost 11211
>>>>>    Trying 127.0.0.1...
>>>>>    Connected to localhost.
>>>>>    Escape character is '^]'.
>>>>>    stats
>>>>>    STAT pid 30211
>>>>>    STAT uptime 19724
>>>>>    STAT time 1295530831
>>>>>    STAT version 1.2.8
>>>>>    STAT pointer_size 32
>>>>>    STAT rusage_user 0.094985
>>>>>    STAT rusage_system 0.230964
>>>>>    STAT curr_items 67
>>>>>    STAT total_items 1089
>>>>>    STAT bytes 168012
>>>>>    STAT curr_connections 11
>>>>>    STAT total_connections 188
>>>>>    STAT connection_structures 14
>>>>>    STAT cmd_flush 0
>>>>>    STAT cmd_get 6580
>>>>>    STAT cmd_set 1089
>>>>>    STAT get_hits 711
>>>>>    STAT get_misses 5869
>>>>>    STAT evictions 0
>>>>>    STAT bytes_read 9254362
>>>>>    STAT bytes_written 5742821
>>>>>    STAT limit_maxbytes 67108864
>>>>>    STAT threads 5
>>>>>    STAT accepting_conns 1
>>>>>    STAT listen_disabled_num 0
>>>>>    END
>>>>>
>>>>>    rows from settings.php
>>>>>    if(extension_loaded('memcache')){
>>>>>               $conf['cache_inc'] = './sites/all/modules/memcache/memcache.inc';
>>>>>               $conf['memcache_key_prefix'] = 'xxx';
>>>>>    }
>>>>>
>>>>>    Tervitades, Margus (Margusja) Roo
>>>>>    +372 51 48 780
>>>>>    http://margus.roo.ee
>>>>>    msn: margusja at kodila.ee
>>>>>    skype: margusja
>>>>>
>>>>>
>>>>>    On 1/20/11 2:45 PM, Jamie Holly wrote:
>>>>>>      Drupal is still going to check the access table to see if you have any
>>>>>>      blocks in there for the current user, even if the table is empty.
>>>>>>
>>>>>>      The semaphore you are seeing is to prevent a cache stampede. You said
>>>>>>      that once you disabled memcache, everything worked fine. It looks like
>>>>>>      you have a problem with either your memcache server, the PHP memcache
>>>>>>      extension or your settings in Drupal for memcache. I would check the
>>>>>>      server first, since that's the easier. You can just do a telnet to check
>>>>>>      that out. From shell:
>>>>>>
>>>>>>      telnet (server address) (server port)
>>>>>>
>>>>>>      See if it connects OK.
>>>>>>
>>>>>>      As far as Pressflow+Memcache, yeah they work great together. I run that
>>>>>>      combination for a couple of clients, including one that has seen over
>>>>>>      150,000 page an hour, and never had a problem.
>>>>>>
>>>>>>      Jamie Holly
>>>>>>      http://www.intoxination.net
>>>>>>      http://www.hollyit.net
>>>>>>
>>>>>>
>>>>>>      On 1/20/2011 4:12 AM, Margusja wrote:
>>>>>>>      If I disable memcache support in PHP then in the problematic server I
>>>>>>>      see that there no problem anymore. So can memcache and pressflow cache
>>>>>>>      work parallel ?
>>>>>>>
>>>>>>>      Tervitades, Margus (Margusja) Roo
>>>>>>>      +372 51 48 780
>>>>>>>      http://margus.roo.ee
>>>>>>>      msn: margusja at kodila.ee
>>>>>>>      skype: margusja
>>>>>>>
>>>>>>>
>>>>>>>      On 1/20/11 10:09 AM, Margusja wrote:
>>>>>>>>        Hi
>>>>>>>>
>>>>>>>>        I have two separate Drupal instances (Pressflow 6.19) In first one the
>>>>>>>>        local cache works fine. Sql log:
>>>>>>>>                    326 Query       SET NAMES "utf8"
>>>>>>>>                    326 Query       SELECT 1 FROM access WHERE type = 'host' AND
>>>>>>>>        '195.50.208.170' LIKE mask AND status = 0 LIMIT 0, 1
>>>>>>>>                    326 Query       SELECT data, created, headers, expire,
>>>>>>>>        serialized FROM cache WHERE cid = 'variables'
>>>>>>>>                    326 Query       SELECT data, created, headers, expire,
>>>>>>>>        serialized FROM cache_page WHERE cid = 'http://IP/path/to/node'
>>>>>>>>                    326 Query       SELECT name, filename, throttle FROM system
>>>>>>>>        WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight
>>>>>>>>        ASC, filename ASC
>>>>>>>>                    326 Query       SELECT name, filename, throttle FROM system
>>>>>>>>        WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight
>>>>>>>>        ASC, filename ASC
>>>>>>>>                    326 Quit
>>>>>>>>
>>>>>>>>        But If I request the same node in the second machine. The code is same,
>>>>>>>>        then the Sql log is:
>>>>>>>>                      122 Quit
>>>>>>>>                      123 Query       SET NAMES "utf8"
>>>>>>>>                      123 Query       SELECT 1 FROM access WHERE type = 'host'
>>>>>>>>        AND 'IP' LIKE mask AND status = 0 LIMIT 0, 1
>>>>>>>>                      123 Query       INSERT INTO semaphore (name, value, expire)
>>>>>>>>        VALUES ('variable_cache_regenerate',
>>>>>>>>        '17865562914d37e5d81acd80.47344784', 1295508982.1098)
>>>>>>>>                      123 Query       SELECT * FROM variable
>>>>>>>>                      123 Query       DELETE FROM semaphore WHERE name =
>>>>>>>>        'variable_cache_regenerate' AND value = '17865562914d37e5d81acd80.47344784'
>>>>>>>>                      123 Query       SELECT name, filename, throttle FROM system
>>>>>>>>        WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight
>>>>>>>>        ASC, filename ASC
>>>>>>>>                      123 Query       SELECT * FROM languages ORDER BY weight
>>>>>>>>        ASC, name ASC
>>>>>>>>                      123 Query       SELECT dst FROM url_alias LIMIT 0, 1
>>>>>>>>                      123 Query       SELECT src FROM url_alias WHERE dst =
>>>>>>>>        'hoiused-ja-investeerimine' AND language IN('et', '') ORDER BY language
>>>>>>>>        DESC, pid DESC
>>>>>>>>                      123 Query       SELECT name, filename, throttle FROM system
>>>>>>>>        WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC
>>>>>>>>                      123 Query       INSERT INTO semaphore (name, value, expire)
>>>>>>>>        VALUES ('locale_cache_et', '17865562914d37e5d81acd80.47344784',
>>>>>>>>        1295508982.4035)
>>>>>>>>                      123 Query       SELECT s.source, t.translation, t.language
>>>>>>>>        FROM locales_source s LEFT JOIN locales_target t ON s.lid = t.lid AND
>>>>>>>>        t.language = 'et' WHERE s.textgroup = 'default' AND s.version = '6.19'
>>>>>>>>        AND LENGTH(s.source)<         75
>>>>>>>>                      123 Query       DELETE FROM semaphore WHERE name =
>>>>>>>>        'locale_cache_et' AND value = '17865562914d37e5d81acd80.47344784'
>>>>>>>>                      123 Query       SELECT s.lid, t.translation, s.version FROM
>>>>>>>>        locales_source s LEFT JOIN locales_target t ON s.lid = t.lid AND
>>>>>>>>        t.language = 'et' WHERE s.source = 'Stores details about batches
>>>>>>>>        (processes that run in multiple HTTP requests).' AND s.textgroup =
>>>>>>>>        'default'
>>>>>>>>        ....
>>>>>>>>        ....
>>>>>>>>        loads of SQLs
>>>>>>>>
>>>>>>>>        The main question why does the last one ask something from semaphore? In
>>>>>>>>        both servers access table is empty. At first I thought the condition
>>>>>>>>        came from that SQL: SELECT 1 FROM access WHERE type = 'host' AND 'IP'
>>>>>>>>        LIKE mask AND status = 0 LIMIT 0, 1 but as I said in both servers access
>>>>>>>>        table is empty.
>>>>>>>>
>>>>>>>>        In both solutions caches are enabled.
>>>>>>>>
>>>>>>>>        Any hints?
>>>>>>>>


More information about the support mailing list