Тормозит php

xander_ru

Новичок
Тормозит php

С недавнего времени стал тормозить php. Я работаю с сайтами на Битриксе, время загрузки страницы иногда превышает 10 сек(раньше было не больше 1-2 секунд). В момент тормозов посмотрел процессы - system жрет почти все(80-90%). Иногда еще бывает прикол - при запросе какой-нить страницы пишет "Не удается найти сервер или ошибка DNS".
У меня Win XP, Apache 1.3.12, PHP 5.0.4, MySQL 5.0
Подскажите, пожалуйста, в чем может быть дело.
 

WP

^_^
нда... xp - ацтой, битрикс - ацтой, apache 1.3.12 - старьё и ацтой, php 5.0.4 - старьё, mysql 5.0 - старьё.
 

Alexandre

PHPПенсионер
нда... xp - ацтой, битрикс - ацтой, apache 1.3.12 - старьё и ацтой, php 5.0.4 - старьё, mysql 5.0 - старьё
неа... атцтой винда, все остальное следствие первого:
В момент тормозов посмотрел процессы - system жрет почти все(80-90%).
у меня часто system сжирает ни с того ни с сего 50-70%, когда убьешь explorer, и перезапустишь его, то система забирает свои 2-3 %.
 

WP

^_^
Gas
а зачем кого-то переубеждать? пусть каждый останется при своём мнение. а если клиентам что-то не нравится пусть сами ставят что им нужно =) я так подхожу к вопросу, и это работает.
 

Gas

может по одной?
WP
я с тобой согласен,
но бывает что есть "жирный" клиент, которого терять не хочется и не выгодно, а в проекте очень уместен partitioning. Но так как 5.1 ещё не релиз, то отдел it-безопасности клиента его рубит, вот и юзается 5.0 с собственной "эмуляцией" оного.
Но это редкость, обычно всё бывает по-нашему :)
 

fixxxer

К.О.
Партнер клуба
а в чем проблема с самодельным партишенингом?
я в одном (относительно небольшом, правда) проекте на днях его добавил, уложился строк в 30 кода ;)

конечно архитектура проекта изначально должна быть вменяемая, это да.
 

fixxxer

К.О.
Партнер клуба
на статью тут не тянет, да и не писатель я. расскажу так =)

мне повезло, что я изначально юзал плейсхолдеры для имен таблиц, т.е. запросы выглядят примерно так - SELECT * FROM { t(User) } WHERE id={ i(id) }

сделал примерно так (детали почиканы для простоты)

PHP:
class DbMysql {
    // ...
    function init(...) {
         // ...
+        if (isset($params['partition_number']) {
+            $params['table_index'] = $params['partition_number'];
+            $params['db_index'] = (int)floor( $params['partition_number'] / TABLES_PER_DATABASE );
+        }
         // ...
         $this->QueryBuilder = new DbQueryBuilder(/*....params...*/);
PHP:
class DbQueryBuilder {
    // ...
    function t($s) {
        $t = constant('SQL::T_'.strtoupper($s));
+         if (!empty($this->part)) {
+             $t = 'Db' . $this->part['db_index'] . '.' . $t . $this->part['table_index'];
+         }
        return $t;
    }
partition_number естественно задается при создании нового ... ммм.. экземпляра сущности по которому идет партишенинг.

как именно бить, сколько таблиц в базе, сколько баз на сервере - it depends, надо всегда мерять считать и думать, но для начала можно просто взять цифру "из общих соображений" и посмотреть что получится ;)

в случае с вебдванолем (когда шардинг по юзеру) предстоит решать еще много проблем (самая очевидная - как юзера авторизовать), но для моих целей хватило того, что есть;)

-~{}~ 28.05.08 04:27:

а, ну да, хост задается отдельно в "конфиге сущности", так же как и partition_number, и определяется при создании методом "если есть новые сервера, то раунд-робин по ним до некоего достижения лимита, иначе раунд-робин по всем". поскольку "сущности" у меня имеют совершенно разные и изначально непредсказуемые объемы, то явные перекосы подкручиваю пока что ручками. =)
 

Gas

может по одной?
а в чем проблема с самодельным партишенингом?
проблемы то нет, тем более шардинг не нужен был, а достаточно базовой функциональности range partitioning. Просто раз есть нативная поддержка, не хотелось писать хоть и маленький, но велосипед.
 

xander_ru

Новичок
Ребят, я понимаю, что большинство из вас мегагуру, но зачем писать про плейсхолдеры и т.д. в теме, для того не предназначенной?
Помогли бы лучше советом.
 

Андрейка

Senior pomidor developer
xander_ru
что значит "работаю с сайтами на Битриксе"?
и чем является комп с winxp ? дома тестишь чтоли?
 

xander_ru

Новичок
"Работаю" значит "делаю" :)
Я фрилансер, комп домашний. Штука в том, что раньше все работало как надо. У меня и на ноуте то же самое ПО стоит, ну может XP какой-нить Service Pack другой, и тоже пашет отлично. А тут хз что случилось.
 

fixxxer

К.О.
Партнер клуба
да мы тут о своем =))

обновись до последних версий для начала
апач 1.3.12 и пхп 5.0.4 это ж жуть какой антиквариат
 

xander_ru

Новичок
У меня есть php 5.2.6, я его не юзаю, т.к. при использвании с Zend Encoder Битрикс выдает ошибку:
Fatal error: Allowed memory size of ... bytes exhausted...
В их FAQ сказано:
Примечание: ошибка часто возникает при использовании пробной (закодированной) версии продукта на PHP 5.2 (и выше) в результате утечек памяти Zend Optimizer. Если у вас есть коммерческий ключ - скачайте исходные коды продукта, иначе необходимо установить более ранние версии PHP и Zend Optimizer.
Проверил - с этой версией php тоже тормозит.

Apache - согласен, древний. Только где взять посвежее?
Тут http://apache.rinet.ru/dist/httpd/binaries/win32/ только Apache2.
 

Breeze

goshogun
Команда форума
Партнер клуба
http://archive.apache.org/dist/httpd/binaries/win32/
 
Сверху