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:

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

payaso1831’s picture

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