Community

The menu system is being rebuilt continuously

I recently upgraded my site to the newest version of Drupal 7 (7.17) along with several modules. I also attempted to upgrade to the newest version of twitter_bootstrap (now bootstrap) but it proved to buggy and I had to revert to the older version.

The issue I am seeing involves the menu system. The menu system seems to rebuild itself over and over until it runs out of memory. This is not a memory issue, I have dedicated hosting and have set the memory as high as 512M.

I have traced the menu rebuild process by printing to my php error log:

[Wed Nov 28 13:50:11 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:11 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:11 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:11 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:11 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:12 2012] [error] [client 172.21.40.31] Function: menu_rebuild
...... (more of the same)
[Wed Nov 28 13:50:19 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:19 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:19 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:20 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:21 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: menu_get_item
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: menu_rebuild
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] ---menu_rebuild- Transaction
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: menu_router_build
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] Function: _menu_router_build
[Wed Nov 28 13:50:22 2012] [error] [client 172.21.40.31] PHP Fatal error: Allowed memory size of \
268435456 bytes exhausted (tried to allocate 71 bytes) in /var/www/test/includes/menu.inc on line \
3642

Here is the what the menu_rebuild functions look like with my logging:

<?php
function menu_rebuild() {
 
error_log("Function: menu_rebuild");
  if (!
lock_acquire('menu_rebuild')) {
   
error_log("---menu_rebuild- Locked out");
   
// Wait for another request that is already doing this work.
    // We choose to block here since otherwise the router item may not
    // be available in menu_execute_active_handler() resulting in a 404.
   
lock_wait('menu_rebuild');
    return
FALSE;
  }

 
$transaction = db_transaction();
 
error_log("---menu_rebuild- Transaction");
  try {
    list(
$menu, $masks) = menu_router_build();
   
_menu_router_save($menu, $masks);
   
_menu_navigation_links_rebuild($menu);
   
// Clear the menu, page and block caches.
   
menu_cache_clear_all();
   
_menu_clear_page_cache();

   
error_log("---menu_rebuild- if");
    if (
defined('MAINTENANCE_MODE')) {
     
variable_set('menu_rebuild_needed', TRUE);
    }
    else {
     
variable_del('menu_rebuild_needed');
     
error_log("----Deleted variable menu_rebuild_needed");
    }
  }
  catch (
Exception $e) {
   
error_log("---menu_rebuild- Exception");
   
$transaction->rollback();
   
watchdog_exception('menu', $e);
  }

 
lock_release('menu_rebuild');
  return
TRUE;
}
?>

A couple of the things I found odd were:

  • menu_rebuild is not getting locked out
  • The if statement is never reached
  • There is no exception, which I knew since nothing is being reported in my Drupal logs

Any help/hints/suggestions would be greatly appreciated.

Thanks

Comments

Fixed the issue -- It appears

Fixed the issue -- It appears to be related to the Profile2 Module. Upgrading to 7.13 fixes it: http://drupal.org/node/1874024

#1399618: Rebuilding lots of exportable entities takes a long time

nobody click here