Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/...

Дискусията в 'Наети Сървъри и VPS' стартирана от Caprice, Авг 5, 2011.

  1. Caprice

    Caprice Active Member

    Рег.:
    Окт 2, 2010
    Съобщения:
    942
    Харесвания:
    210
    Точки:
    43
    Място:
    OFFLINE
    Вдигам си отново темата за компетентно мнение по следния казус

    Сайтовете ми, които са на един и същи сървър се отваряха изключително бавно в продължение на няколко часа, а преди малко окапаха съвсем. Сега пък дава следната грешка:

    В сървъра ли е проблема или някъде другаде? Работещите процеси бяха 2/25. На какво се дължи проблема с многото връзки? Мерси
     
    Последно редактирано: Авг 5, 2011
  2. alex.atanasov

    alex.atanasov Active Member

    Рег.:
    Ян 27, 2009
    Съобщения:
    309
    Харесвания:
    42
    Точки:
    28
    Място:
    Sofia
    От: От: Server down - решение?



    По принцип това ограничение се задава в глобалният конфигурационен файл на MySQL - /etc/my.cnf в който променливата е:

    max_connections=

    И в момента в който броя връзки се изчерпа дава грешката която си показала по-горе в поста си, по пътя на логиката е сървърен проблем и е добре да се свържеш с поддръжката за помощ.
     
  3. ktomov

    ktomov Premium

    Рег.:
    Ян 22, 2010
    Съобщения:
    2,707
    Харесвания:
    513
    Точки:
    0
    Re: Server down - решение?

    Този проблем съм го наблюдавал и аз. Та ще започна от самото начало (без да искам да те подценявам).
    В такива случаи първото нещо което трябва да направиш е да проследиш от къде идва проблема. Бавното отваряне в комбинация с горното означава (поне при мен беше така), че имаш slow query и mysql сървъра увисва, както и апачето което товари машината. Надявам се, че имаш роот достъп за да можеш да изпълниш всичко от долните
    Стъпките които е добре да направиш:
    1. Отвори си конфигурационния файл който се намира тук /etc/my.cnf и добави следните редове (това ще записва всички запитвания към базата, които имат продължителност повече от 5 секунди).
    Код:
    log-slow-queries = /var/log/mysql-slow.log
    long_query_time = 5
    
    2. Добави този ред из файла - max_connections=300 (това ще увеличи броя на максималните връзки към базата от 100 които са по подразбиране на 300 за да нямаш проблеми докато изследваш проблема)
    3. След това създай въпросния файл, примерно с командата touch /var/log/mysql-slow.log и му дай права за писане от сървъра chmod 755 /var/log/mysql-slow.log
    4. Рестартирай mysqld с /etc/init.d/mysqld restart
    5. С помощта на phpmyadmin оптимизирай всяка една таблица от базите ти, напълно е възможно някоя повредена таблица да ти генерира бавните запитвания.
    6. Остава ти да чакаш и от време на време да проверяваш горния лог.
    Имай предвид, че с увеличаване на броя връзки, ще се увеличи и размера на рам паметта, която се ползва от mysqld.

    Ако си на споделен хостинг, голяма част от тях позволяват ползването на къстъм файл за конфигурация на mysql, но няма да можеш да логваш, а единствено да предадеш параметъра от точка 2 като поставиш файла my.cnf в папката /home/caprice/public_html/

    Отново ако имаш руут достъп до сървъра и не ти се кисне пред терминала за да следиш натоварването, може да ползваш долното скриптче, което ползвам от преди време за имейл нотификация при високо натоварване на сървъра. Стъпките за да го ползваш са следните:
    1. Създаваш файл /home/caprice/restart.sh, чието съдържание да е нещо такова:
    Код:
    #!/bin/sh
    check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
    if [ $check -gt 8 ]
    then
    ADMIN=tvoia@email.com
    
    host=`hostname`
    res=`top -bn 1`
    /usr/sbin/sendmail -f $ADMIN -t << sendemail
    To: $ADMIN
    Subject: High load on [$host]
    Load Average : $check
    
    Top command :
    $res
    sendemail
    killall httpd
    killall mysqld
    wait 10
    /etc/init.d/httpd restart
    /etc/init.d/mysqld restart
    fi
    
    Целта на скрипта е следната: Проверява натоварването на сървъра и ако то е над 8 се изпраща имейл на зададения в примера по-горе, спира всички процеси свързани с апачето, спира всички процеси свързани с mysqld, изчаква 10 секунди да се нормализират нещата и рестартира апаче и майскл. Ако искаш само да получаваш имейл, без да се рестартират услугите, скрипта трябва да изглежда така:
    Код:
    #!/bin/sh
    check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
    if [ $check -gt 8 ]
    then
    ADMIN=tvoia@email.com
    
    host=`hostname`
    res=`top -bn 1`
    /usr/sbin/sendmail -f $ADMIN -t << sendemail
    To: $ADMIN
    Subject: High load on [$host]
    Load Average : $check
    
    Top command :
    $res
    sendemail
    fi
    
    2. Даваш му права за изпълняване chmod 744 /home/caprice/restart.sh
    3. Създаваш файл /etc/cron.d/auto_restart, със съдържание
    Код:
    * * * * * root /home/caprice/restart.sh >> /dev/null 2>&1
    
    Това ще стартира скрипта всяка минута, който ще проверява за натоварване над 8. Не се притеснявай, няма да получаваш информация, че кронтаба извършва тази процедура.
    4. Рестартираш крон демона /etc/init.d/crond restart

    Естествено тази цифра от 8 може да си я промениш на колкото ти е удобно. За едно ядро, нормално ползване на процесора е 1.00, за две 2.00. В зависимост от това колко процесора и ядра имаш, нещата може да седят по-поразличен начин при теб. Аз имам достъп до две ядра и за това съм сложил цифрата 8, което значи, че натоварването е 4 пъти повече от оптималното (което свидетелства за проблем).

    Ако имаш други питания - драскай, или ми пиши в скайп за по-бързо разрешаване на проблемите.
     
    coolice и HaRRo харесват това.
  4. Caprice

    Caprice Active Member

    Рег.:
    Окт 2, 2010
    Съобщения:
    942
    Харесвания:
    210
    Точки:
    43
    Място:
    OFFLINE
    От: Server down - решение?

    Алекс, естествено, че се свързах първо със съпорта. За съжаление обаче нито взеха много присърце повтарящия се проблем нито получих удовлетворяващ отговор какво мога аз да направя по въпроса.

    Красене, мерси страшно много за изчерпателния отговор. На споделен хостинг съм. По-късно като се прибера ще се опитам да направя това, което си описал, макар че имам леки резерви дали ще се справя :) Сигурно ще се свържа с теб за съдействие
     
    Последно редактирано: Авг 7, 2011
  5. coolice

    coolice Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    12,500
    Харесвания:
    634
    Точки:
    113
    Пол:
    Мъж
    От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

    разделям ти старата тема Каприз в нова тема и я правя важна защото е станала много ценен ресурс :) а на ktomov не смогвам да му давам репутация :)
     
  6. Caprice

    Caprice Active Member

    Рег.:
    Окт 2, 2010
    Съобщения:
    942
    Харесвания:
    210
    Точки:
    43
    Място:
    OFFLINE
    От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

    Задмина очакванията ми, наистина ;)
    Само още веднъж да напомня, че не можете да се възползвате от препоръките по-горе, ако ползвате споделен хостинг
     
  7. delta_force

    delta_force Active Member

    Рег.:
    Апр 12, 2008
    Съобщения:
    730
    Харесвания:
    50
    Точки:
    28
    От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

    Е то е нормало да не може, все пак се иска root достъп до сървъра, а на споделен хост такъв достъп си е само за техническата поддръжка. За ВПС и наета машина е друга работата, там всичко заспива. Ама Томов си го знам, че е луд на тема ВПС-и, даже не съм сигурен дали изобщо ползва споделен.

    И като заговорихме за репутации - наскоро не съм давал на много хора, не мога да му дам пак, а толкова помощ и съвети съм получил от него точно за ВПС-и, че не е истина просто!
     
  8. docenta

    docenta New Member

    Рег.:
    Ноем 28, 2010
    Съобщения:
    262
    Харесвания:
    15
    Точки:
    0
    Място:
    Sevlievo, Bulgaria
    От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

    Лично мое мнение, е че long_query_time = 5 е много време. Всяка MySQL заявка отнемаща над 1 максимум 2 секунди заслужава внимание.
     

Сподели страницата

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies.
    Dismiss Notice