Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Превышен лимит открытых файлов
 
 автор: Владимир55   (28.07.2007 в 11:55)   письмо автору
 
 

Уже несколько дней при попытке открыть свой сайт получаю чистую страницу с сообщением:

================
Warning: mysql_connect() [function.mysql-connect]: Can't initialize character set cp1251 (path: /usr/local/share/mysql/charsets/) in /home/.../data/public_html/config.php on line 33

В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.
================

config.php у меня существует только для обслуживания счетчика, а строка 33 содержит следующую запись:

$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);


После нескольких попыток сайт открывается, хотя я не предпринимал никаких действий с настройками VDS, на котором он установлен, и даже не перезагружал его.

Обращение к техподдержке дало такой результат:
"Судя по логам mysql это происходит из-за слишком большого количества открытых файлов."

По тарифу допускается 512 одновременно открытых файлов.

Что посоветуете?

   
 
 автор: ddhvvn   (28.07.2007 в 11:58)   письмо автору
 
   для: Владимир55   (28.07.2007 в 11:55)
 

Хм...

А что за файлы? Запущенные скрипты? Или что?

   
 
 автор: Владимир55   (28.07.2007 в 12:04)   письмо автору
 
   для: ddhvvn   (28.07.2007 в 11:58)
 

Содержимое строки 33 приведено в сообщении. Посмотрите чуть выше.

   
 
 автор: Владимир55   (28.07.2007 в 13:50)   письмо автору
 
   для: ddhvvn   (28.07.2007 в 11:58)
 

Дык, кабы знать...

Из скриптов только счетчик. Остальное - статика.

   
 
 автор: cheops   (28.07.2007 в 12:46)   письмо автору
 
   для: Владимир55   (28.07.2007 в 11:55)
 

В смысле открытых MySQL-ем файлов? Вам доступно редактирование my.ini? Что сейчас в нём находится?

   
 
 автор: Владимир55   (28.07.2007 в 13:48)   письмо автору
 
   для: cheops   (28.07.2007 в 12:46)
 

На сайте только статические страницы, из скриптов - только счетчик. Средняя загрузка процессора еще ни разу не поднималась выше 0.25%.

"В смысле открытых MySQL-ем файлов?" - Не знаю, что сказать. Ответ процитировал, а большего не знаю.

"Вам доступно редактирование my.ini" - доступен его аналог my.cnf
Вот что в нем:


# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/db/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password    = your_password
port        = 3306
socket        = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port        = 3306
socket        = /tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4

   
 
 автор: ddhvvn   (28.07.2007 в 14:20)   письмо автору
 
   для: Владимир55   (28.07.2007 в 13:48)
 

Не густо... :)

   
 
 автор: cheops   (28.07.2007 в 14:23)   письмо автору
 
   для: Владимир55   (28.07.2007 в 13:48)
 

Сколько вам памяти доступно? Значение key_buffer в любом случае следует увеличить - тогда MySQL не будет сбрасывать всё во временные таблицы на жёстком диске (и соответственно файлы не будет держать открытыми). Поставьте вместо 16Кб где нибудь 16М, если в памяти не ограничены, то 64М, а то и выше.

   
 
 автор: Владимир55   (28.07.2007 в 14:31)   письмо автору
 
   для: cheops   (28.07.2007 в 14:23)
 

Памяти у меня гарантированно 96 Мб (а потенциально возможно при наличии ресурса, но не гарантировано 288Мб - на эту цифру я не ориентируюсь, словно нет её - верно?).

Поставить 16М?

   
 
 автор: cheops   (28.07.2007 в 14:42)   письмо автору
 
   для: Владимир55   (28.07.2007 в 14:31)
 

96Мб на процесс? В любом случае 16 Мб должно хватить на большинство запросов и количество открытых файлов должно снизиться.

   
 
 автор: Владимир55   (28.07.2007 в 14:49)   письмо автору
 
   для: cheops   (28.07.2007 в 14:42)
 

В аккаунте читаю:
Информация о системе:
- Процессор Virtual CPU 105 MHZ
- Оперативная память 96 Мб.
- Файл подкачки (swap) 191 Мбайт
- количество запущенных процессов - 22

Может, key_buffer сделать больше, 32М, например?

   
 
 автор: cheops   (28.07.2007 в 15:14)   письмо автору
 
   для: Владимир55   (28.07.2007 в 14:49)
 

Можно, в любом случае 16 Кб цифра не адекватная для MySQL - у меня даже на локальной машине это значение 128Мб.

   
 
 автор: cheops   (28.07.2007 в 14:44)   письмо автору
 
   для: Владимир55   (28.07.2007 в 13:48)
 

Можете также ограничить количество открытых файлов при помощи директивы open-files-limit
open-files-limit=500

   
 
 автор: Владимир55   (28.07.2007 в 14:51)   письмо автору
 
   для: cheops   (28.07.2007 в 14:44)
 

Прямо вот так вписать эту строку в my.cnf?


То есть одновременно и буфер увеличить, и установить ограничение на открытые файлы?

Тогда будет чуть притормаживать, но не сбоить, верно?

   
 
 автор: cheops   (28.07.2007 в 15:13)   письмо автору
 
   для: Владимир55   (28.07.2007 в 14:51)
 

>Прямо вот так вписать эту строку в my.cnf?
Да, в секции [mysqld], после любых изменений конфигурационного файла необходимо перегрузить MySQL-сервер.

Ограничение ничего нового не даст, но по крайне мере у вас останется запас дескрипторов, если например потребуется открыть файл средствами PHP (для тех же сессий). Увеличение размера буфера в принципе должно решить проблему.

   
 
 автор: Владимир55   (28.07.2007 в 15:08)   письмо автору
 
   для: Владимир55   (28.07.2007 в 11:55)
 

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

Зато совершенно очевидно другое - быстродействие VDS вцелом стало просто фантастическим! Щелк - и готово, страница открылась! В том числе и форум рнрнвв, который до того изрядно тормозил!

Спасибо Вам, Хеопс!

БОЛЬШОЕ спасибо!

   
 
 автор: cheops   (28.07.2007 в 15:16)   письмо автору
 
   для: Владимир55   (28.07.2007 в 15:08)
 

Хм... если база форума (счётчика) разрастётся, то имеет смысл также увеличить размер других буферов
sort_buffer_size = 8M
read_buffer_size = 8M
join_buffer_size = 8М

   
 
 автор: Владимир55   (28.07.2007 в 15:48)   письмо автору
 
   для: cheops   (28.07.2007 в 15:16)
 

Спасибо, тоже взял на вооружение!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования