[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Connection pool, Load on start-up
bol95
Господа, в PHP новичок так что не бейте сильно (сам J2EE разработчик). Задача глобальная: мигрировать приложение с Java на PHP. Конкретные вопросы:

1. Есть ли connection pool для связи Apache+mod_php (5.3) c MySQL (5 версии) базой? Желателен пул и для оракла. Погуглил, ничего кроме рекомендации использовать mysql_pconnect не нашел. И не нашел как для mysql_pconnect ограничить максимальное число коннектов к базе (как ограничить на уровне конфига MySQL нашел).

2. В J2EE (точнее в веб-контейнерах) есть возможность загрузить сервлет при старте Апп Сервера (через load-on-startup). Есть ли такая возможность для указанной выше связки? Пока ничего лучше, чем прописать запуск php скрипта в скрипт запуска Апача не нашел. (Цель в перспективе: сбор статистики, прогрев кэша, материализация view в oracle rdbms, когда и если на нее перейдем)

3. Есть ли возможность создавать глобальные переменные для всего приложения (application scope servlet context, не знаю как еще сформулировать). Поясню как смогу: например нужен счетчик посещений всего сайта. Во всех найденных примерах на php число посещений пишется в БД или в файл, но хотелось бы иметь некую переменную, доступную из всех скриптов на чтение\запись.

4. Есть ли гайд по миграции с J2EE на PHP? Буду очень благодарен за линк.



Спустя 10 часов, 18 минут, 26 секунд (27.10.2010 - 08:32) linker написал(а):
1. mysql_pconnect - создает одно постоянно соединение для всех.
2. Java - это более клиентская ботва, а PHP всегда серверная. Собственно не совсем понятен вопрос.
3. Вроде такого не наблюдал, можно использовать memcached и там хранить глобальные переменные, другое дело, что все равно их надо где-то постоянно хранить и время от времени синхронизить из/в кэш.

Спустя 1 час, 46 минут, 52 секунды (27.10.2010 - 10:19) bol95 написал(а):
Можно уточнить пару моментов?

1. в документации по mysql_pconnect сказано, цитата:
"First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection."
Ключевая фраза: "instead of opening a new connection". Для эксперимента создал страницу создающую коннект к базе через mysql_pconnect и выполняющую select с последующим закрытием коннекта через mysql_close. Нагрузил страницу через JMeter (100 тредов с паузами) и через pmpmyadmin посмотрел динамику max. concurrent connections. Число соединений выросло с 1 до 26. Как итог вывод - соединение создается не одно. Я где-то не прав?
2. J2EE это 100% серверная, как вы выразились "ботва".
3. Жаль.

Спустя 17 минут, 46 секунд (27.10.2010 - 10:37) linker написал(а):
1. Эта ключевая фраза значит, что если соединение не было найдено, то будет создано новое. А не будет оно найдено, если почитать чуть ниже: "Note, that these kind of links only work if you are using a module version of PHP"
2. Сервис апача запускается один раз. Вообще, я сказал, что не понятен смысл вашего второго пункта.

Спустя 22 минуты, 19 секунд (27.10.2010 - 10:59) bol95 написал(а):
1. По первому вопросу разобрались.

2. Пояснение по второму: при старте апача нужно чтобы отработал определенный php код. Не при первом обращении пользователя, а именно при старте апача. Зачем, примеры как реальные так и чисто умозрительные
2.1 сбор оракловой статистики (DBMS_STATS);
2.2 прогрев ораклового же кэша;
2.3 удаление временных файлов;
2.4 проверка доступности на момент старта приложения всех нужных сервисов - БД, распределенных файловых систем, серверов очередей.

Все эти процедуры по времени выполнения занимают от 5 до 30 минут. Без их успешного выполнения приложение не должно запускаться.

3. Попутный вопрос - как я понял в PHP есть свой garbage collector. Есть ли инструменты мониторинга его работы (как часто запускается, какова динамика показателя свободной\занятой памяти и т.д.). В идеале нужно средство типа JProfiler.

Спустя 42 минуты, 32 секунды (27.10.2010 - 11:42) linker написал(а):
2.1. Допустим, если апач один раз загрузился и больше никогда не выгружался скажем в течении года, т.е. статистика соберется только один раз, оно действительно так надо?
2.2. Допустим, один раз за год запустили прогрев, потом оракл в середине этого года перегружали, требуется ли прогрев?
2.3. Допустим, но почему бы не использовать планировщик задач для очисти временных файлов, сколько их скопится за год по условию пункта 2.1?
2.4. Допустим проверили, все хорошо и замечательно, но ничто не вечно под луной, бывает что-то отваливается, что тогда, апач-то так и продолжает работать?
3. gc_enable() - активация сборщика мусора
gc_enabled() - получение статуса сборщика мусора
gc_collect_cycles() - запускаем
gc_disable() - отключаем
Сие справедливо для PHP 5.3.x

Спустя 18 минут, 16 секунд (27.10.2010 - 12:00) bol95 написал(а):
2.1 Да, оно действительно так надо.
2.2 Да, потребуется повторный прогрев кэша.
2.3 Можно использовать и планировщик, но не хотелось бы городить новую компоненту которая будет выполнять всего несколько команд.
2.4 Если какая-то компонента недоступна, служба эксплуатации пытается ее поднять без остановки портала в целом. Если не получается - идут дальше по регламенту. Регламент пишем в т.ч. мы (разработка), так что если будет нужно - апач перезапустят.

Если отвлечься от примеров я верно понимаю что такой возможности просто нет?

Спустя 5 минут, 43 секунды (27.10.2010 - 12:06) Basili4 написал(а):
bol95
Насколько я знаю ява менее ограничена в возможностях чем пыха. Что Вас побудило писать на пыхе ??

Я просто данное время изучаю яву и просто в восторге от её возможностей.....

Спустя 2 минуты, 29 секунд (27.10.2010 - 12:08) linker написал(а):
bol95
Ну скажем да, PHP не для этого создан, как и Perl, Python, Ruby и прочие.

Basili4
Предатель smile.gif

Спустя 2 минуты, 40 секунд (27.10.2010 - 12:11) Basili4 написал(а):
linker
Я не предатель я рассматриваю язык как инструмент вот пыха молоток им хорошо гвозди забивать а ява отвертка ей надо шурупы отворачивать и заворачивать. Тыж не будешь молотком шурупы забивать

Вот и я хочу молотком гвозди, отверкой шурупы. smile.gif

Спустя 3 часа, 49 минут, 44 секунды (27.10.2010 - 16:01) bol95 написал(а):
Я не знаю возможности PHP столько хорошо, как J2EE, поэтому пока не могу судить. Но навскидку в PHP есть более удобные вещи, чем в Java (но есть и "недостатки" - собственно о них и был первый пост).

Миграция имеет вполне объяснимые причины: текущее приложение всем устраивает кроме цены на IBM WebSphere AS (десятки тысяч USD). Мигрировать без переписывания хотя бы части кода на tomcat или jboss не можем (используем фишки ibm jdk). Сейчас идет анализ на какой платформе\стеке продуктов создать приложение для SOHO рынка. Я считаю варианты по миграции на Sun JDK и PHP. Коллега - по миграции на ASP. Кого выберут тому и продлят контракт.

Спустя 2 часа, 7 минут, 55 секунд (27.10.2010 - 18:09) vasa_c написал(а):
Апач не связан никак с оракловым кэшем и подобным. Может при старте системы это делать, а не при старте Апача?

Спустя 1 час, 17 минут, 18 секунд (27.10.2010 - 19:26) bol95 написал(а):
Цитата
Апач не связан никак с оракловым кэшем и подобным. Может при старте системы это делать, а не при старте Апача?


Портал+СУБД+Ряд_сервисов (шина, BI и проч) и есть система. В текущей реализации при старте портала (WebSphere), портал же и проверяет прочие сервисы на доступность.

И, как я уже писал, пример с ораклом это лишь пример. Интересовала сама возможность автовыполнения кода при старте, присутствующая в J2EE. Порылся на Stack Overflow - в PHP такой возможности нет, вопрос можно закрывать.

Цитата
gc_enabled()

Судя по документации gc_enabled возвращает только статус (true\false) - работает GC или нет. Как итог, в PHP возможности мониторить память и GC на предмет сколько занято, чем занято и когда освобождено нет.

Спустя 1 час, 22 минуты, 42 секунды (27.10.2010 - 20:49) linker написал(а):
Ну почему же, в PHP есть функции для получения инфы о занятых ресурсах и памяти.

Спустя 25 минут, 27 секунд (27.10.2010 - 21:14) vasa_c написал(а):
bol95, сервер в J2EE и его связь с явой, совсем другое нежели связь апача с PHP.
Поэтому все инициализационные действия в этом случае привязывать к старту апача смысла нет.
Вот я новый виртуальный хост в него внёс и рестартанул. Почему кэш оракла должен при этом как-то затрагиваться?

Цитата
в PHP такой возможности нет

да внесите в скрипты запуска апача вызов PHP-сценария.
или отдельный сценарий, который запускает апач, а потом выполняет что нужно.

Спустя 2 минуты, 57 секунд (27.10.2010 - 21:17) bol95 написал(а):
Цитата
Ну почему же, в PHP есть функции для получения инфы о занятых ресурсах и памяти.


linker, а можно чуть чуть подробнее? хотя бы название функций? интересуют:
1. общий занятый объем памяти (занятый apache и\или php);
2. объем памяти, занятой объектами (переменные, код);
3. объем мусора (очевидно равный п.1-п.2);
4. способ, как узнать какие скрипты (или переменные) в данный момент времени занимают больший объем памяти (например топ 10 самых памяти-емких переменных\функций)

п.1 можно узнать и средствами ОС, например top. п.2 и 3. только изнутри сервера.

очень не помешал бы совет, есть ли какой-нибудь профилировщик по памяти?

Спустя 6 минут, 15 секунд (27.10.2010 - 21:23) bol95 написал(а):
vasa_c
Цитата
сервер в J2EE и его связь с явой, совсем другое нежели связь апача с PHP.
Сейчас начинаю это осознавать.

Цитата
да внесите в скрипты запуска апача вызов PHP-сценария.
в самом первом своем посте я сам же это и предложил. других вариантов пока не вижу, думаю вопрос можно закрывать.

Спустя 6 минут, 23 секунды (27.10.2010 - 21:30) linker написал(а):
memory_get_usage(), memory_get_peak_usage(), ini_get('memory_limit'), getrusag(). Все остальное зависит исключительно от вас. К томуже никто не отменял exec() или system(), например exec('ps aux|grep www');

Спустя 1 час, 59 минут, 18 секунд (27.10.2010 - 23:29) vasa_c написал(а):
bol95 и всё-таки для начала разберитесь, чем отличается архитектура J2EE от приложения на PHP.
Пыхо-приложение представляет собой кучу сценариев которые запускаются на каждый запрос и дохнут через миллисекунды. И к сборщику мусора здесь предъявляются абсолютно другие требования чем там.
И вопросы про "какие скрипты в данный момент занимают больше памяти" и "объём памяти занятый apache и php" в этом контексте того же смысла, что с явой не имеет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.