|
|
|
| Давно хотел спросить, да все руки не доходили.
Отчего вообще виснет сайт?
Сегодня наткнулся :
Warning: mysql_connect() [function.mysql-connect]: Too many connections in /var/www/catalog4/data/www/commerce-center.ru/_application.php on line 42
Перешел по какой-то ссылке и вот это выдало.
Отсюда и вопрос: что это было? Вернее из контекста понятно что это, а вот из-за чего?
А еще читал про условия хостинга в одной конторе, так там было написано что-то вроде "число одновременных запросов к базе данных-16". Т.е. если так выйдет, что 17 "клиентов" одновременно запрос сделают все повиснет? | |
|
|
|
|
|
|
|
для: netman
(09.01.2008 в 03:36)
| | >Вернее из контекста понятно что это, а вот из-за чего?
Это ограничение, выставленное хостером.
>Т.е. если так выйдет, что 17 "клиентов" одновременно запрос сделают все повиснет?
Если на каждую страницу по одному соединение открывается, то 17-ому будет сказано: "Too many connections". На самом деле, 17 одновременных поединений - это очень много.
Не 17 человек одновременно на сайте находятся, а 17 человек одновременно сделали запрос у сайту. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(09.01.2008 в 05:45)
| | а можно поподробнее? почему 16 соединений не много , а 17 - много? и разве это не те люди,
которые в on-line? ведь каждый клик открывает какую-то статью, значит, делает запрос к
базе. в чем разница между запросом и соединением? разве соединение на прерывается после
прекращения работы скрипта автоматически? | |
|
|
|
|
|
|
|
для: elenaki
(09.01.2008 в 10:30)
| | 16 соединений - это конечно зверское ограничение, обычно выделяют несколько сотен соединений на всех - ведь задача не ограничить пользователя, а просто предотвратить падение сервера. Это не совсем люди находящиеся OnLine - это одновременные запросы, т.е. те, которые находятся в очереди - выполняются они очень быстро, за секунду могут быть выполнены несколько тысяч запросов, при этом планка в 16 одновременных соединений может быть так и не взята.
>разве соединение на прерывается после
>прекращения работы скрипта автоматически?
Да, если не используется mysql_pconnect() или скрипт не отдаёт большой объём данных в сеть (музыка, объёмный файл и т.п.), а с другой стороны его не качают по диаплапу в течении нескольких часов - если соединение не было закрыто до отправки данных в сеть - оно будет висеть и спать. | |
|
|
|
|
|
|
|
для: cheops
(09.01.2008 в 13:45)
| | >а просто предотвратить падение сервера
В данном случае сервер врядли упадет | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(09.01.2008 в 05:45)
| | Не сказал бы, для больших порталов, 17 соеденений одновременно это бывает мало.
Зависит от производительности сервера. | |
|
|
|
|
|
|
|
для: netman
(09.01.2008 в 03:36)
| | >Т.е. если так выйдет, что 17 "клиентов" одновременно запрос сделают все повиснет?
17 запрос будет отброшен с ошибкой "Too many connections" - это сделано для того, чтобы не было пиковых потреблений памяти, грозящих падению сервера. | |
|
|
|
|
|
|
|
для: cheops
(09.01.2008 в 13:41)
| | Не 17 человек одновременно на сайте находятся, а 17 человек одновременно сделали запрос у сайту.
====================
объясните,в чем разница? если на сайте одновременно сотни и он не виснет? а потом вдруг
50 чел и виснет? | |
|
|
|
|
|
|
|
для: elenaki
(09.01.2008 в 13:55)
| | Нет, на сайте одновременно 100 человек, все вместе они создают примерно 8.6 одновременных соединений (обычно соединения происходят очень быстро), потом заваливается человек 500 и создают 40.2 одновременных содинений - вот тут и срабатывает ограничение.
PS Соединения происходят очень быстро - поэтому чтобы в очереди скопилось их несколько - нужно много человек - как только очередь заполнена - все остальные соединения отбрасываются. | |
|
|
|
|
|
|
|
для: cheops
(09.01.2008 в 14:40)
| | cheops, если поддержка пула-соединений в MySQL предусмотрена, есть ли возможность влиять на число соединений, находящихся в этом пуле ( уведличивать их число или уменьшать) | |
|
|
|
|
|
|
|
для: oradev
(09.01.2008 в 19:58)
| | Да, количество одновременных соединений определяется директивой max_connections (my.ini), кроме того можно ограничить конкретного пользователя в количестве одновременных соединений при помощи системной переменной max_user_connections. Можно и длинной очереди запросов управлять, но директиву сейчас на вскидку не вспомню, нужно в мануале рыться. | |
|
|
|
|
|
|
|
для: cheops
(09.01.2008 в 13:41)
| | >17 запрос будет отброшен с ошибкой "Too many connections" - это сделано для того, чтобы не было пиковых потреблений памяти, грозящих падению сервера.
Спасибо всем за ответы!
Еще одна неясность: если отключить вывод ошибок, "Too many connections" будет выводиться
или нет? Не хочу чтобы кто-то видел как у меня все устроено. Это ведь вроде обычный
php-notice?
Кстати, эти warning`ги как то нумеруются (типа ошибка номер...)? | |
|
|
|
|
|
|
|
для: netman
(10.01.2008 в 11:49)
| | Если отключите - выводится не будут, можно запретить вывод только этого предупреждения при помощи @
<?php
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.01.2008 в 14:12)
| | Когда работаю, и не думаю что-то отключать. Но публиковать, мне кажется, надо с отключенными noticами. | |
|
|
|