LINUX.ORG.RU
ФорумAdmin

Время отклика страницы

 , , ,


0

1

Всем доброго дня!

Имеется 3 контейнера:

nginx	(192.168.0.1; 1 GB)
apache	(192.168.0.2; 1 GB) PHP + APC, memcached (сессии)
mysql	(192.168.0.3; 4 GB)

MySQL ~15-20к запросов/сек на запись/чтение/изменение

При легком тестировании нагрузки слишком высокое время отклика, порядка 0.4-0.7 сек

Подскажите, пожалуйста, в какую сторону смотреть? Спасибо!

/etc/nginx/nginx.conf

user www-data;
worker_processes 8;
timer_resolution 100ms;
worker_rlimit_nofile 8192;
worker_priority -5;
pid /var/run/nginx.pid;

events {
	worker_connections 2048;
}

http {
	sendfile on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	
	access_log off;
	error_log /var/log/nginx/error.log;
	
	gzip on;
	gzip_min_length 1100;
	gzip_buffers 64 8k;
	gzip_comp_level 3;
	gzip_http_version 1.1;
	gzip_proxied any;
	gzip_types text/plain application/xml application/x-javascript text/css;
	
	include /etc/nginx/users/*;
}

/etc/nginx/users/u00001.conf

server {
	root /mnt/home/u00001/example.ru/public_html;
	server_name example.ru;
	index index.htm index.html index.php;
	
	location ~ /\.ht {
	        deny all;
	}
	
	location ~* ^.+\.(js|JPG|jpg|png|jpeg|gif|zip|tgz|gz|rar|doc|xls|exe|pdf|ppt|txt|wav|bmp|rtf)$ {
	    expires 30d;
	    root /mnt/home/u00001/example.ru/public_html;
	}
	
	location / {
		proxy_pass         http://192.168.0.2:80;
		proxy_redirect     off;
		
		proxy_set_header   Host             $host;
		proxy_set_header   X-Real-IP        $remote_addr;
		proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
		
		proxy_connect_timeout      61;
		proxy_send_timeout         61;
		proxy_read_timeout         61;
	}
}

Apache Server MPM: ITK

/etc/apache2/apache2.conf

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2

<IfModule mpm_prefork_module>
	StartServers		5
	MinSpareServers		5
	MaxSpareServers		75
	MaxClients			150
	MaxRequestsPerChild	0
</IfModule>

/etc/apache2/users/u00001.conf

<VirtualHost *:80>
        ServerName example.ru
        DocumentRoot /mnt/home/u00001/example.ru/public_html

        AssignUserID u00001 u00001

        php_admin_value open_basedir /mnt/home/u00001/example.ru/public_html
        php_admin_value doc_root /mnt/home/u00001/example.ru/public_html
        php_admin_value upload_tmp_dir /mnt/home/u00001/example.ru/tmp

        php_admin_value apc.enabled 1
        php_admin_value apc.shm_size 128M
        php_admin_value apc.mmap_file_mask /mnt/home/u00001/example.ru/tmp/apc.XXXXX
        php_admin_value apc.num_files_hint 20000
        php_admin_value apc.user_entries_hint 20000
        php_admin_value apc.ttl 86400
        php_admin_value apc.user_ttl 7200
        php_admin_value apc.gc_ttl 3600
        php_admin_value apc.max_file_size 4M


        ErrorLog /mnt/home/u00001/example.ru/logs/error.log
        TransferLog /mnt/home/u00001/example.ru/logs/access.log

        <Directory /mnt/home/u00001/example.ru/public_html>
                Options FollowSymLinks
                Order Allow,Deny
                AllowOverride All
                Allow from All
        </Directory>
</VirtualHost>

/etc/mysql/my.cnf

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql

skip-external-locking

innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 2GB
innodb_doublewrite = 0
innodb_support_xa = 0
innodb_thread_concurrency = 16

transaction-isolation = READ-COMMITTED

table_open_cache=800
bind-address            = 0.0.0.0
key_buffer              = 32M
max_allowed_packet      = 32M
thread_stack            = 192K
thread_cache_size       = 8
myisam-recover			= BACKUP
query_cache_limit       = 64M
query_cache_size        = 32M
expire_logs_days        = 10
max_binlog_size         = 100M

/proc/user_beancounters

[nginx]

kmemsize                  3872872              7360512           1073741824           1073741824
lockedpages                  3194                16384                16384
privvmpages                 13588                16444           1073741824           1073741824
shmpages                        7                    7                 1152                 1152
numproc                        23                   42                  128                  128
numtcpsock                      1                  141                 1024                 1024
numflock                        1                    6                   50                   60
numpty                          4                   32                   32
numsiginfo                     21                  256                  256
tcpsndbuf                   17440              2476480           1073741824           1073741824
tcprcvbuf                   16384               577400              4194304              4194304
othersockbuf                18496                30136               135168               237568
dgramrcvbuf                135168               196608
numothersock                   43                   49                  100                  100
dcachesize                 400092               405466               405504               405504
numfile                       153                  330                 1024                 1024
numiptent                      20                   20                   64                   64

[apache]

kmemsize                  4760406             84217856           1073741824           1073741824
lockedpages                  3194                16384                16384
privvmpages                 50508               822778           1073741824           1073741824
shmpages                       26                   26                16384                16384
numproc                        21                  186                 1024                 1024
numtcpsock                      4                  294                 1024                 1024
numflock                        2                    6                   50                   60
numpty                          4                   32                   32
numsiginfo                     57                  256                  256
tcpsndbuf                   69760              5127360           1073741824           1073741824
tcprcvbuf                   65536               762968              4194304              4194304
othersockbuf                 4624                32304               135168               237568
dgramrcvbuf                  4624               135168               196608
numothersock                   40                   46                  100                  100
dcachesize                 396396               405503               405504               405504
numfile                       225                  640                 1024                 1024
numiptent                      20                   20                   64                   64
            
[mysql]

kmemsize                  2431247              4243456           4294967296           4294967296
lockedpages                  3194                16384                16384
privvmpages                639503               641670           1073741824           1073741824
shmpages                        6                    6                 1152                 1152
numproc                        34                  117                  128                  128
numtcpsock                      1                   68                 1024                 1024
numflock                        4                    9                   50                   60
numpty                          4                   32                   32
numsiginfo                     24                  256                  256
tcpsndbuf                  165680               524288               524288
tcprcvbuf                   16384               541728              4194304              4194304
othersockbuf                 2312                 8456               135168               237568
dgramrcvbuf                  2312               135168               196608
numothersock                   29                   35                  100                  100
dcachesize                 401016               405492               405504               405504
numfile                       133                  280                 1024                 1024
numiptent                      20                   20                   64                   64

По статистике /proc/user_beancounters заголовки:

resource held maxheld barrier limit

Где limit пустой получился - там held = 0

no_Bra1n
() автор топика

Сами посмотрите что дольше всего отрабатывает. Попробуйте статику/php подергать В mysql можно врубить slow log и поглядеть будет ли туда чтото валиться. Для php прикрутить memcache да много чего наворотить можно, хоть чтолибо продебажте и определите «узкое место»

black_13
()
Ответ на: комментарий от goingUp

Т.е. конфигурация в общем нормальная?

Тестировалось панелью производительности Битрикс

№ 	Соед. 	Хитов 	Ошибок 	Стр/сек. 	Время генер. 	Время получ.
1 	32 	173 	0 	57.67	 	0.056375 	0.385687
2 	34 	183 	0 	61.00	 	0.066309 	0.368803
3 	36 	173 	0 	57.67	 	0.060020 	0.379582
4 	38 	180 	0 	60.00	 	0.063368 	0.355801
5 	40 	172 	0 	57.33	 	0.058245 	0.375807

Нагрузка на процессор ощутимая За минуту теста load average: 20.24, 6.07, 2.09 И во время него в top много apache2 процессов, которые по 10-20% CPU

Сам процессор:

Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

Интересно ещё то, что пробовал тот же тест на хостинге, там при 32 соединениях аж 1700 хитов!

no_Bra1n
() автор топика
Ответ на: комментарий от black_13

memcache прикручен, но используется только на хранение сессий

Использую для теста производительности Битрикс, поставил его, имеется удобный раздел с советами и проведениями нагрузочных тестов + советует что где подкрутить в APC, MySQL

no_Bra1n
() автор топика

зарегайся в newrelic, подключи себе триалку с полным функционалом - она тебе покажет о твоем приложении всё, включая статистику - сколько времени уходит на какой mysql-запрос, сколько на БД в общем, на обработку в PHP, на мемкеш, на внешние сервисы, загрузку disk IO на сервере.

Komintern ★★★★★
()
Ответ на: комментарий от no_Bra1n

битрикс
время отклика порядка 0.4-0.7 сек

тут нечего жаловаться. это очень, очень хороший результат для битрикса.

Komintern ★★★★★
()
Ответ на: комментарий от Komintern

Битрикс - неплохая штука, но дело не в этом

На хостинге при тех же 32 соединениях 1700 хитов, как писал выше, и время отклика 0.02 сек

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

А эталон у них 0.03 вообще :) это при тестах процессора и др. тоже время отклика есть. Там-то и у меня 0.04, но это не при нагрузке

зарегайся в newrelic

Сейчас заценю что это!

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

Настройки нжинкса те же? Такие результаты можно получить, только при включенном кеше нжинкса. Или при неработающей странице :)

goingUp ★★★★★
()
Ответ на: комментарий от Komintern

Не, мне не нужно тестировать приложение :)

На хостинге и у меня Битрикс, только там ещё сайт полноценный, а у меня голая минимальная редакция, так что не в коде дело, а в самом сервере

Процессор, значит?

no_Bra1n
() автор топика
Ответ на: комментарий от goingUp

я вообще не понимаю как ОПу удалось достичь такого времени отклика битрикса. у меня он вообще без нагрузки, голый только установленый битрикс, грузился ну секунду-полторы. это же тяжеленная хреновина.

Komintern ★★★★★
()
Последнее исправление: Komintern (всего исправлений: 1)
Ответ на: комментарий от no_Bra1n

NR покажет тебе примерно следующее:
на PHP потрачено: сколько-то процентов времени
на MySQL: сколько-то
на Memcached: сколько-то
на внешние сервисы (типа запрос лицензии с сервера битрикса и т.п вещи): сколько-то

время загрузки страницы он разобьет тебе на App server, Network, DOM Processing и Page render, покажет какие классы/процедуры в php-коде занимают сколько времени, время выполнения каждого запроса в мускуле, статистику по серверу (cpu, disk IO, memory) тоже. короче это реально комплексный мониторинг, но жутко дорогой.

Komintern ★★★★★
()
Ответ на: комментарий от Komintern

Сорри, это я лошок!

Системный тест выполнял (оставил путь пустым) и там, и там
На хостинге указал сейчас главную страницу

32 70 23.33 3.038560 3.075850

Вот это уже реальнее, а то я сам что-то удивился :D

Пjлучается 100% дело в настройках сервера, т.к. при том же системном вызове там 1700 хитов и 0.02, а у меня 200-300 и 0.4-0.6 ;(

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

А в эталонных 0.03 - это «Среднее время отклика», т.е. не всей страницы, а видимо обращается и к статике, и скрипт, все делит на общее кол-во, как-то так, наверное

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

У меня так вообще при 32 соединениях

хиты сек
16 1.427990
25 5.080030
67 2.726980

no_Bra1n
() автор топика
Ответ на: комментарий от Komintern

Сейчас восстанавливаю резервную копию сайта с хостинга у себя, в top наверху mysqld с 50-60% CPU, что это значит?

Слабый процессор? Не оптимально настроенная база?

no_Bra1n
() автор топика
Ответ на: комментарий от Komintern

Все тормозит apache+php, провел тесты с помощью ab

До отключения модуля php:

Requests per second:    56.85 [#/sec] (mean)
Time per request:       17588.786 [ms] (mean)
Time per request:       17.589 [ms] (mean, across all concurrent requests)
Transfer rate:          61.46 [Kbytes/sec] received
И после:
Requests per second:    308.05 [#/sec] (mean)
Time per request:       3246.278 [ms] (mean)
Time per request:       3.246 [ms] (mean, across all concurrent requests)
Transfer rate:          143.79 [Kbytes/sec] received

Буду пробовать оптимизировать сам php-интерпритатор..

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

Подключил модуль обратно, не раскомментировав блок подключения виртуальных хостов - всё осталось работать так же шустро

Подключил конфиг с виртуалками - всё вернулось, стал использоваться php в скрипте

no_Bra1n
() автор топика
Ответ на: комментарий от Komintern

Я наоптимизировался! :)

Когда php начинается инклудить, соединяться с базой и т.д. - вот тогда начинаются тупняки

Komintern, что вы можете посоветовать? Узкое место почти найдено - php

Сейчас попробую простенький скрипт написать соединения с базой и выборки какой-нибудь

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

Тест на простеньком скрипте

$dbconn = mysql_connect('mysql.example.ru', 'u00001', 'password');
mysql_select_db('u00001');

$query = mysql_query('SELECT * FROM b_iblock LIMIT 1');
print_r(mysql_fetch_assoc($query));
отрабатывает шустро.. Не так как голый html, конечно, чуть подольше, но и далеко не как с CMS на борту!

Ну всё, дальше я сам не в силах. Буду дальше гуглить и ждать ответ ЛОР :)

no_Bra1n
() автор топика
Ответ на: комментарий от no_Bra1n

«apache MPM: ITK + modphp» у меня всегда ассоциируется с тормозами. mpm itk это решение одной проблемы (разделение доступа) ценой производительности. Можно ли этот битрикс запускать на nginx + php-fpm ?

PS А этот битрикс не умеет использовать пул подключений к mysql ?

vel ★★★★★
()
Ответ на: комментарий от no_Bra1n

Узкое место почти найдено - php

и чо? это изначально понятно было, т.к битрикс - это тяжелый код. посоветовать ничего не могу т.к если верить что битрикс у тебя открывается пол-секунды, то это ОЧЕНЬ хорошо.

Komintern ★★★★★
()
Ответ на: комментарий от vel

На машине планируется размещать клиентские сайты, поэтому и разделение такое жесткое. Сам apache с модулем работает шустро, просто было интересно, почему на хостинговой машине одно и то же (сайт на Битрикс) работает с намного меньшим откликом. Процессор, видимо лучше

no_Bra1n
() автор топика
Ответ на: комментарий от Komintern

Понял! После того, как перестал искуственно ддсосить сервер сайт летает, публичная часть, админка - быстрее чем на хостинге. Так что все ок!

no_Bra1n
() автор топика
Ответ на: комментарий от vel

В случае битрикса это экономия на спичках.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.