[support] Problem with Drupals built in cache

Jamie Holly hovercrafter at earthlink.net
Thu Jan 20 18:45:55 UTC 2011


Just use cacherouter instead of the memcache module. The configurations 
in settings.php are a little different, but that's what I use without 
any problem.

Jamie Holly
http://www.intoxination.net
http://www.hollyit.net


On 1/20/2011 12:59 PM, Margusja wrote:
> So, I can replace my regular cache module with cacherouter and pressflow
> and memcache should work parallels?
>
> Tervitades, Margus (Margusja) Roo
> +372 51 48 780
> http://margus.roo.ee
> msn: margusja at kodila.ee
> skype: margusja
>
>
> On 1/20/11 7:06 PM, Jamie Holly wrote:
> >  You're using the regular memcache module. I've never used that one.
> >  Maybe someone who has would have an idea. Personally, I use cacherouter
> >  since it offers more features and flexibility.
> >
> >  Jamie Holly
> >  http://www.intoxination.net
> >  http://www.hollyit.net
> >
> >
> >  On 1/20/2011 10:32 AM, 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