powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
23 сообщений из 23, страница 1 из 1
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36529590
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема выглядит следующим образом:
Есть ASA9.02 сервер на Linux RedHat5. На нем же стоит SQLAnywhere 10+PHP+Апач. 10-й sybase потребовался т.к. только начиная с него появилось расширение php_sqlanywhere для пхп для linux'а. Т.е. из пхп идет использование SA10 в качестве клиента и для использования нативного подключения к серверу ASA9. Подключение идет через TCPIP (да, сам на себя через сетевой уровень), не через sharedmemory.

Все вроде работает зашибательно. Однако, на активной нагрузке (это единственное что приходит на ум) в определенный момент все встало. В логе апаче наблюдаю ошибки от PHP суть которых сводится к тому, что подключение к БД не удалось о чем сообщает драйвер Sybase от 10-ки. Буквально это звучит так: "Connection error: Insufficient system resources - failed to allocate a SYSV semaphore"
Во-первых, непонятно кому не хватило семафоров, серверу или драйверу? Во-вторых куда они делись и как добавить их количество?

Ко всему прочему в логе сервера вижу постоянные сообщения о том, что "клиент абнормально отсоединился, куда-то делся короче". Я понимаю, что не происходит грамотного отключения от БД, и подключившийся к БД поток кем-то убивается и от него остается висеть семафор. Это судя по всему и есть причина.
Это все предыстория была.

Подключение из PHP идет функцией sqlanywhere_pconnect. С помощью нее организуется пул подключений. Возможно я безграмотно им воспользовался, т.к. отключений от БД нигде нет. Есть похожие функции sybase_pconnect и прочие, так что у меня вопрос не столько по АСА, сколько в принципе по сабейзовским пулам и работе с ними из PHP, т.к. сделаны они наверно аналогично.
Каким образом нужно штатно отключаться от БД из PHP, если мы используем подключения при помощи *_pconnect? Ну и вообще, какие могут быть советы в данной ситуации. Т.к. система может работать исправно сутками без всяких нареканий, а потом бац... Семафоры эти..
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36529650
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) PHP - гадость. Наш выбор - Perl !

2) sqlanywhere_pconnect() это устаревшая функция. Ныне надо использовать sasql_pconnect()

3) те которые начинаются на sybase_ это функции из OpenClient. Для SA их использовать можно конечно, но смысл?

4) отключаться от persistent connection (а как это по русски то будет?) точно так же как и от обычных - sasql_disconnect().

5) И наконец: документация великая штука :) Она явно (хоть и слегка туманно) предупреждает об опасности использования p connect на загруженных серверах.
http://dcx.sybase.com/index.php#1100en/dbprogramming_en11/php-pconnect.html
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36530524
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2)sqlanywhere_pconnect это псевдоним на sasql_pconnect. Переделали на sasql ничего не изменилось.
3)Про sybase_ функции я упомянул, чтобы привлечь внимание специалистов по ASE, предполагая, что механизм пулизации и использования семафоров там может быть идентичный АСАшному.
4) Выяснилось, что отключаться при постоянных подключениях не нужно и не получится, это должен делать менеджер пула...
5) Туманно описано как раз наоборот. Что pconnect лучше использовать на высоконагруженных серверах для того, чтобы сэкономить ресурсы на постоянных подключениях/отключениях.

Качнул исходники PHP_SQLANYWHERE библиотеки, вычитал что были исправления в функции pconnect от октября 2009. Обновил на сервере. Не помогло. Опять раскорячилось.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36530623
SQLMantis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer,

Тут рассказано в чем проблема.


White Owl, php конечно гадость, но все же лучше для веб чем perl.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36530715
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я видел это. Собсно и остается открытым вопрос: как сделать так, чтобы апач не килил своих детей, которые имеют подключения. Первопричина где-то рядом, но я владею только симптоматикой.
Сейчас вообще решили без пула сделать. Семафоры остаются все равно, не смотря на то, что висящих коннектов к БД нет...
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36530974
SQLMantis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerЯ видел это. Собсно и остается открытым вопрос: как сделать так, чтобы апач не килил своих детей, которые имеют подключения. Первопричина где-то рядом, но я владею только симптоматикой.
Сейчас вообще решили без пула сделать. Семафоры остаются все равно, не смотря на то, что висящих коннектов к БД нет...
Это тоже смотрели?

Я бы, для начала,просто выставил нужное количество семафоров и поигрался бы с настройками php
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36531667
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это тоже видел.

Ситуация следующая.
Если не использовать пул, то все встает гораздо быстрее. Семафоры все кончаются и усе. Буквально за 5 минут. Добавлением в системе семафоров это не лечится, т.к. "сколько волка не корми он все в лес смотрит". Просто оттягивается момент стопа. С пулом живет дольше, т.к. меньше подключений используется и как следствие с меньшей скоростью остаются семафоры.
Настройки пхп тут невлиятельны, и так, и сяк...
Непонятно в какую сторону двигаться. То ли апачу объяснять, чтобы он не килил своих детей, то ли на стороне ПХП некорректная работа, то ли библиотека DBCAPI от sybase дурит.
И вот еще. Sybase рекомендует для апача 2.х использовать thread safe версию драйвера. Не знаю влияет ли, но на сервере phpinfo выдает Thread Safety => disabled.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36532821
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там советуют обновиться . Посмотрим что получится. Как слепой ежик в черном лесу, с этими линухами...
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36535449
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerТам советуют обновиться . Посмотрим что получится. Как слепой ежик в черном лесу, с этими линухами...Не гони на пингвинов, это все ПХП косячит.
Вообще-то, если честно, против PHP у меня есть всего два возражения и самый главный - БД драйвера к нему кривые и полуработающие. Драйвер sybase_ct (для ASE то есть) я два раза лично напильником обрабатывал, сначала для OC12.5 потом для OC15. У нас сервера шифруют пароли, а sybase_ct про такие тонкости не знает...
Для ASA, года четыре тому назад я вообще не смог найти работающего драйвера. Спасло то, что веб-сервер у нас стоял на виндах, так ODBC обошолся...
Второе возражение: использовать PHP никуда кроме веба не удобно.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36535584
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пингвины-то не причем. Просто познания в линуксовых инструментах у меня не сильные. Выяснил недавно, что можно не только мониторить семафоры в системе, но и оставшийся "мусор" чикать. А то ведь приходилось железку грузить...

Тут вот какое развитие с этой темой получилось. Действительно, семафоры оседали в системе из-за того, что апач убивал лишние потоки, а SA клиент видимо не имел обработчика этого убития. Увеличив параметр MaxSpareServers достаточно сильно (практически до MaxClients), и уменьшив MinSpareServers до 5 я добился того, что веб-сервер практически не занимается убитием своих детей. Они просто висят в памяти вхолостую. Плюс ко всему прочему обновил SA10 и php_sqlanywhere драйвер. Кстати, этот драйвер родился где-то за последние два-три года только. Все вроде работает, все семафоры (ipcs -s -t) регулярно обновляются, ничего не оседает.
НО! Если я меняю вызовы sqlanywhere_[functions] на sasql_[functions], то в системе активно остаются висеть семафоры, с каждым новым запросом они прибывают и прибывают.. И через 5 минут в системе все "заср@но" и встает в раскоряку. Странно все это. В исходниках вроде вычитал, что sqlanywhere_ сделаны всего лишь псевдонимами к sasql_. А оно вот ведь как...
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36536179
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть какая. А на линуксе как-то odbc заюзать нельзя? Я в линуксе "ноль на массе", но мало ли.
И конечно же продолжайте пожестче развивать ваш топик на сайбезовом форуме, может кто и почешется.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36543419
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldЖесть какая. А на линуксе как-то odbc заюзать нельзя? Я в линуксе "ноль на массе", но мало ли.
И конечно же продолжайте пожестче развивать ваш топик на сайбезовом форуме, может кто и почешется.
В линуксе есть аналоги ODBC, типа unixODBC и прочие. Но это все костыли еще те. Местами глюк на глюке. Лучше уж использовать нативный драйвер от производителя (php_sqlanywhere), чем прослойки организовывать.

Пожестче сложно, я по-англицки очень фигово изъясняюсь. Попытаюсь в сторонке на полигоне прокатать все ситуации, тогда будет возможно четко выдать условия и последствия. Пока со временем туго, не горит.

Я вот одного пока не понял, когда заходит речь о семафорах, то необходимо кое-чего уточнить. Оказывается один клиент АСА использует не столько семафор, сколько пакет-массив семафоров. Два потока клиентов - два массива семафоров и т.д. В RedHatEL5 по умолчанию в системе есть 128 массивов семафоров по 250 штук в каждом. Т.е. на самом деле семафоров в системе до фига, но используются они крайне не понятно(не эффективно?). 128 штук при большой нагрузке выбивается запросо. Но остается вопрос, это что, действительно для работы одного коннекта SA-клиента с ПХП нужен пакет из 250 семафоров???!!! Не думаю, что действительно предполагается такое использование семафорного ресурса ОС. В противном случае у меня кривые руки и я не знаю какого-то ключевого секрета. Режим работы апача prefork. Может надо его перекомпилить на worker режим?

P.S.: Неужели никто не использует связку Linux+Apache+PHP+ASA(ASE)? Может ну его в баню АСА и перейти на MySQL?
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36543488
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerP.S.: Неужели никто не использует связку Linux+Apache+PHP+ASA(ASE)? Может ну его в баню АСА и перейти на MySQL?(бубнит себе под нос) а я все php скрипты доставшиеся в наследство на perl переписываю...
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36554458
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ерунда какая-то.
Думал, что проблема из-за управления потоками на апаче 2.2. Выкачал с инета исходники apache 1.3.42, php 5.3.2, php_sqlanywhere 2.0.9. В пхпшном коде заменил все вызовы sqlanywhere_ на sasql_, чтобы уж тестить с новым интерфейсом. Все перекомпилировал со статической компоновкой модулей. И... И ничего приятного. Редко возникают падения детей апача. В его логе это выглядит, как "[notice] child pid XXXXX exit signal Segmentation fault (11)". Т.е. с новыми функциями библиотеки php_sqlanywhere отписывается такая ерунда, в случае со старыми функциями ничего не отписывается, но в обоих случаях из-за некорректного завершения потока остаются не освобожденные семафоры.
Нужно менять драйвер доступа из PHP к SA? Или заниматься backtrace'ом при помощи gdb и искать ошибку? А может все дело в слишком "многопоточном" железе, один 4х-ядерный Xeon, и что-то где-то кого-то обгоняет? А самое главное не могу нащупать однозначной причинно-следственной связи.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36562172
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последнюю проблему решил. По совету разработчиков из iAnywhere при вызове sasql_query в явном виде указал третий параметр SA_USE_RESULT. По умолчанию, если он не указывается, он считается за SA_STORE_RESULT. Segmentation fault прекратились, выборки отрабатывают уже несколько суток подряд, в error_log чистота и порядок. Возможно это связано с тем, что все выборки из ПХП у меня идут не запросами SELECT, а через вызовы ХП call. Вот такой нюанс.

А убитие апачем своих потоков предотвратил кардинально, установил в его настройках MaxClients=MaxSpareServers.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36569348
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихо сам с собою беседу я веду.
А вот и еще одного жука за хвост поймали. Если сделать последовательно два запроса sasql_query(..,..,SA_USE_RESULT), а потом попытаться отфетчить и закрыть сначала один, а потом второй, то опять вываливается Segmentation fault.
Так что висящие семафоры - это всего лишь следствие.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36569532
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- perl лучше чем php
- чем? чем лучше?
- работоспособностью драйверов
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36882722
roooomaaaan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer,

чем закончилась история?
Кстати, у нас, ПХП-5 дружит с АСА 9.02 ))
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36883517
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, да ничем не закончилась.
От persistent подключений отказались, перешли на подключение/отключение к БД на каждом запросе. Иногда в логе апаче видно segmentation fault его потока, плюс в системе подвисает навечно заюзаный семафор. Эпизодически приходится гасить апач и убивать все семафоры, оставшиеся после его остановки. Оформили скриптом. Неправильно это.

Отпишите плиз версии, ОС, дров АСА, сервера АСА, веб-сервера/пхп и т.п.
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36885047
anty_rc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl[quot iLLer] ...Драйвер sybase_ct (для ASE то есть) я два раза лично напильником обрабатывал, сначала для OC12.5 потом для OC15. У нас сервера шифруют пароли, а sybase_ct про такие тонкости не знает.....

Уважаемый WhiteOwl , был бы Вам премного благодарен(думаю что не я один), если бы Вы более подробно описали процесс шлифовки...можно даже отдельным топиком..
(мой вопрос про связку CentOS+PHP+sybase-ct пока так и не смог решить... )
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36885253
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anty_rcWhite Owl[quot iLLer] ...Драйвер sybase_ct (для ASE то есть) я два раза лично напильником обрабатывал, сначала для OC12.5 потом для OC15. У нас сервера шифруют пароли, а sybase_ct про такие тонкости не знает.....

Уважаемый WhiteOwl , был бы Вам премного благодарен(думаю что не я один), если бы Вы более подробно описали процесс шлифовки...можно даже отдельным топиком..
(мой вопрос про связку CentOS+PHP+sybase-ct пока так и не смог решить... )Это было два года тому назад. Я уже все тонкости и не вспомню.
В общих чертах:
Берешь исходник php_sybase_ct модуля.
Исправляешь в нем версию OpenClient c CS_VERSION_100 на CS_VERSION_150. Иначе шифрование вообще включаться не будет.
Ищешь там функцию php_sybase_do_connect_internal()
Добавляешь в нее поддержку шифрования.
Исправляешь makefile чтобы он искал имена библиотек от 15-ой версии вместо 12-ой.
Перекомпилируешь.
Потом правишь баги и перекомпилируешь еще раз.

О! Пытаясь вспомнить как я это делал наткнулся на статью:
http://ccit.college.columbia.edu/knowledgebase/article/setting-sybase-ct-with-encrypted-password-connections-linux-using-ase-15.php
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36885336
roooomaaaan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer,

ОС: Centos 5.4

веб-сервера: nginx 0.8.34 + apache 2.2.15

php: 5.2.6
Драйвер, по информации php info:
sqlanywhere

SQLAnywhere support: enabled

Allow Persistent Connections: Yes

Persistent Connections: 0/unlimited

Total Connections: 0/unlimited

PHP SQLAnywhere driver version: 1.0.8

SQLAnywhere client version: 9.0.2.2452


Сервер с СУБД

ОС: Gentoo Base System version 1.6.13 linux 2.6.11-gentoo-r6

СУБД: Adaptive Server Anywhere Version 9.0.2.3182

А какая конфигурация у вас?
...
Рейтинг: 0 / 0
LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
    #36888565
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОС: Linux RedHat 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64

веб-сервер: apache 2.2.3

php: 5.1.6

PHP SQLAnywhere driver version: 2.0.8.0

SQLAnywhere client version: 10.0.1.4061

Сервер с СУБД та же машина

СУБД: Adaptive Server Anywhere Version 9.0.2.3748

Интерфейс доступа в драйвере взяли новый, который sasql, а не sqlanywhere. С ним хоть как-то заработало.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / LINUX+PHP+ASA+пул-подключений=периодический стоп (проблемы с семафорами?)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]