Стали отлаживать и докопались до вызова session_start() в main/include.php - львиная доля всего времени сборки страницы в "проблемных" случаях приходилось именно на вызов этой функции.
Затем обратили внимание на закономерность - проблема возникала тогда, когда мы запрашивали страницу через очень короткий (2-3 секунды) промежуток времени после того, как отобразилась предыдущая страница сайта.
Заглянули в Fiddler - около десятка "битых" ссылок на .gif-ки, видимо - в шаблоне сайта. При этом по запросам сервер отдает контент нашей /404.php
Таким образом, подходим к разгадке: при запросе страницы выполняется с десяток запросов на несуществующие страницы, сервер отдает 404-ю ошибку, которая перехватывается нашим обработчиком (nginx либо не используется, либо обработка 404 статуса происходит на уровне Apache). Каждый из этих запросов блокирует сессию и, пока все они не будут обработаны, session_start() на странице, которую мы запросим через непродолжительное время, будет ожидать разблокировки, что займет несколько секунд.
Резюмируя: "битые" ссылки на изображения и иную статику в коде страницы могут приводить к тому, что при достаточно быстром переходе пользователя от одной страницы к другой, время формирования страниц вырастает до неприемлемых величин.
P.S. Этот пост ни в коем случае не отменяет того факта, что обычно большое время сборки страницы приходится на выполнение "тяжелых" SQL-скриптов - "Разработка"/"Отладка" вам в помощь!
Можете его вкратце описать?
Какие средства используете?
ну а для вычисления времени выполнения отдельных строк - конструкцию вида
причем весь вывод обуславливаем значением $_SERVER["REMOTE_ADDR"], чтобы не влиять на вывод на работающем сайте.