1 (изменено: SMERCH_223, 2009-03-05 09:55:53)

Тема: Онлайн 200+

Не знаю создавались ли подобные темы на форуме, если ДА - прошу прощения, удалите тему и дайте, пожалуйста, ссылку, если НЕТ - давайте обсудим.

Для многих очень важна настройка файлов my.ini php.ini httpd.conf, а также возможно сама установка mysql, apache для сайта или онлайн игры с онлайном более 200 человек!
Но более интересно сама конфигурация  my.ini php.ini httpd.conf для таких целей!

При наших, стандартных, настройках, что бы желательно изменить?
(XP apache 2.2.11 mysql 5.0.77 php 5.2.8 MYISAM опер. 3гб, проц. Athlon x2 5600+)

2

Re: Онлайн 200+

Все настройки проверяются опытным путем, то есть: меняем и смотрим на реакцию сервера (сколько памяти съело, загрузка процессора и т.д.)

httpd.conf
В подключенном httpd-mpm.conf:
<IfModule mpm_winnt_module>
    ThreadsPerChild      150
    MaxRequestsPerChild    0
</IfModule>
Здесь можно увеличить ThreadsPerChild и ограничить MaxRequestsPerChild примерно на 1000.
Остальные директивы можно посмотреть здесь (те что относятся к модулю mpm_winnt): http://httpd.apache.org/docs/2.2/mod/mpm_common.html

В PHP, просто не включаем неиспользуемые расширения.

my.ini
Можно увеличить max_connections.
Настроек огромное количество, особенно действенны могут быть те, что связаны с кешированием. Опять-таки, можно подергать и посмотреть на реакцию сервера. Чтобы не бродить в потьмах, откройте в phpMyAdmin страницу "Состояние", там красным будут отмечены значения на которые рекомендуется обратить внимание.

3 (изменено: SMERCH_223, 2009-03-06 11:04:32)

Re: Онлайн 200+

ну в Состоянии у меня красными выделены пару параметров:

Handler_read_rnd       16 k    Количество запросов, на чтение строки, основанных на ее позиции. Большое значение переменной может быть обусловлено частым выполнением запросов использующих сортировку результата, выполнением большого числа запросов требующих полного сканирования таблиц, наличием объединений не использующих индексы надлежащим образом.

Handler_read_rnd_next       929 k                Количество запросов на чтение следующей строки из файла данных. Данное значение будет высоким, при частом сканировании таблиц. Обычно это означает, что таблицы не проиндексированы надлежащим образом или запросы не используют преимущества индексов.

Created_tmp_disk_tables       25                 Количество временных таблиц, автоматически созданных сервером на диске, во время выполнения SQL-выражений. Если значение Created_tmp_disk_tables велико, следует увеличить значение переменной tmp_table_size, чтобы временные таблицы располагались в памяти, а не на жестком диске.

Opened_tables                         94                 Общее количество открывавшихся таблиц. При большом значении переменной рекомендуется увеличить размер кеша таблиц (table_cache).

Table_locks_waited                   56                 Количество запросов на блокировку таблицы, которые были удовлетворены только после определенного периода ожидания. Если значение велико и есть проблемы с производительностью, необходимо сначала оптимизировать свои запросы, а затем разбить свою таблицу (или таблицы) или использовать репликацию.

Это выделено красным, хотя параметры у меня вроде как подняты до предела, возможно ошибаюсь:
max_connections=310
query_cache_size=128M
table_cache=2048
  // кстати здесь не нужно ставить в конце М?
tmp_table_size=526M
thread_cache_size=16

myisam_max_sort_file_size=100G
myisam_sort_buffer_size=83M
key_buffer_size=1024M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K

innodb_additional_mem_pool_size=20M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
innodb_buffer_pool_size=287M
innodb_log_file_size=256M
innodb_thread_concurrency=8

P.S. Очень интересный блог, особенно для новичков при оптимизации: http://boombick.org/blog/posts/6

4

Re: Онлайн 200+

table_cache - это максимальное количество открытых таблиц для всех потоков (целое число). Увеличение данного значения, увеличивает количество доступных для mysql файловых дескрипторов. Примерно можно определить значение так: увеличиваем значение и смотрим уменьшается ли значение в Opened_tables. Возможно, одновременно стоит попробовать увеличивать и эту переменную: open_files_limit
http://dev.mysql.com/doc/refman/5.1/en/ … ables.html

Остальное сложно комментировать, так как значения переменных зависят не только от аппаратной конфигурации сервера, но и от характера выполняемых SQL запросов и используемого типа БД (MyISAM, InnoDB...).

5 (изменено: SMERCH_223, 2009-03-06 22:37:35)

Re: Онлайн 200+

Какие параметры не изменяю, все равно иногда у некоторых пользователей подвисают картинки, ну и собственно весь сервер. Ошибок в логах нет. Более 2х месяцев не могу нарыть причины... sad
- тип БД у меня MyISAM, запросов в среднем в секунду идет от 20 до 100, в среднем 45 в секунду!!!
А где собственно можно увеличить параметр этой переменной open_files_limit, ато не нашел.

И встречный вопрос: файл httpd.conf
правильно в этот модуль ставить:
<IfModule mime_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
</IfModule>

так как это у Вас написано при установке, или же как на многих форумах показано:

<IfModule php5_module>
     AddType application/x-httpd-php .php
     AddType application/x-httpd-php-source .phps
</IfModule>

P.S. Большое спасибо за помощ и консультации!

6

Re: Онлайн 200+

SMERCH_223
Как происходит вывод картинок? Они хранятся на сервере в каталогах, как файлы, а в БД их имена и пути; или картинки хранятся в бинарном виде в БД?

Можно попробовать поменять MyISAM на InnoDB, который поддерживает транзакции и следовательно лучше будет работать с очередями запросов. Но здесь нет очевидного ответа. Опять-таки - только собственный опыт. (Бэкап всегда!)

Значение open-files-limit можете посмотреть на странице переменных в phpMyAdmin. Устанавливается директива в my.cnf. Ниже пример из my-innodb-heavy-4G.ini (пример одного из рекомендуемых конфигурационных файлов MySQL).
open-files-limit = 8192

Очевидно, что тег IfModule содержит директивы, которые подключаются при наличии указанного модуля (загруженного в Apache).
В статье речь идет о настройках Apache для Windows, которые несколько отличаются от Unix, но различия не существенны.
MIME модуль назначает заголовки пакетов, обработчики, фильтры в зависиомсти от расширений файлов. Я не знаю примера, чтобы этот модуль был выключен, но раз без него назначение типов (AddType) не имеет смысла, то почему бы не проверить.

php5_module - это модуль связывающий PHP интерпретатор и Apache. В отличие от CGI он всегда сидит в памяти и из-за этого работает быстрее. То есть обработка файла имеющего расширение .php будет осуществлена PHP интерпретатором, если в Apache включен модуль php5_module. Заметьте, что .php файлы запущенные как CGI под это условие не попадают, поэтому обрабатываться PHP не будут.

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

7 (изменено: SMERCH_223, 2009-03-07 13:16:01)

Re: Онлайн 200+

Hanut сказал:

Как происходит вывод картинок? Они хранятся на сервере в каталогах, как файлы, а в БД их имена и пути; или картинки хранятся в бинарном виде в БД?

спасибо, поставил в my.ini переменную open-files-limit = 8192
смотрю теперь на Переменные в phpmyadmin, а там стоит open files limit    500

картинки все находятся в каталогах, в самих же файлах.php пути к ним, вот иногда у некоторых игроков, единиц, происходит подвисание на некоторое время, но у других в это время все работает как положено
к сожалею InnoDB думаю не подойдет, нужна высокая скорость работы, что даёт MyISAM, нужно с нею что-то думать...

8

Re: Онлайн 200+

SMERCH_223 сказал:

смотрю теперь на Переменные в phpmyadmin, а там стоит open files limit    500

Ограничение на количество открываемых файлов накладывает операционная система. http://dev.mysql.com/doc/refman/5.1/en/table-cache.html

Системные переменные table_open_cache, max_connections, и max_tmp_tables определяют максимальное количество файлов, которые сервер может держать открытыми. При увеличении одного или нескольких этих значений, можно столкнуться с лимитом накладываемым опереционной системой по количеству открытых файловых дескрипторов на один процесс. Большинство операционных систем позволяют увеличить лимит открытых файлов (open-files limit), однако способ существенно различается от системы к системе. Сверьтесь с документацией вашей операционной системы на предмет возможности увеличения лимита и способа это сделать.

Переменная table_open_cache соотносится с max_connections. К прмеру, для 200 одновременных соединений вы должны установить размер кеша таблицы (table cache size), по меньшей мере, 200 ? N, где N - максимальное количество таблиц к объединению (JOIN) в любом из исполняемых запросов. Также необходимо зарезервировать еще немного для дескрипторов временных таблиц и файлов.

Мне кажется, что MySQL в вашем случае не при чем, учитывая, что картинки берутся из файловой структуры, надо подумать именно над тем, не происходит ли блокировка из-за одновременного обращения к одному файлу сразу нескольких запросов. По идее, в таком случае может помочь кеширование картинок, но как конкретно это сделать и какими средствами, затрудняюсь сказать. Могу только посоветовать поискать решения в Интернете. Смотрите описание mod_cache для Apache (картинки статичны, поэтому их можно смело закешировать). Ну и конечно, любое кеширование - это дополнительная оперативная память.