LINUX.ORG.RU
решено ФорумAdmin

nginx + php-fpm + mariadb выдает только половину ответа

 , ,


0

1

Есть довольно высоконагруженный сервер (по нескольку запросов в секунду), в основном запросы идут на один скрипт. Он выполняет некоторую работу, после этого такой код:

$res = $mysqli->query("SELECT `f1`, `f2` FROM `tbl` WHERE ... LIMIT 500");
if (!$res) {echo "query error: (". $mysqli->errno . ") ".$mysqli->error."\n";}
echo "<table>";
if ($res) {
	while ($row = $res->fetch_assoc()) {
		echo "<tr><td>{$row["f1"]}</td><td>{$row["f2"]}</td></tr>";
	}
	$res->free();
}
echo "</table>";
и периодически, 1 запрос из 20-30 сервер в ответ выдает кусок полного ответа, каждый раз разной длины, такого вида:
<table>
<tr><td>1</td><td>2</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>1</td><td>
или вообще
<table>
<tr><td>1</td><td>2</td></tr>
<tr><td>1</td
самое забавное, что /var/log/nginx/error.log при этом не содержит данных об этой ошибке, /var/log/php-fpm.log тоже. как такое может быть в принципе? создается ощущение, что здесь либо тонкая сисадминская ошибка (где-то срабатывает какой-то лимит, и текущее соединение просто режется), или виноват хостер

могу выложить conf файлы nginx и php-fpm. P.S.: еще один странный факт. я отслеживаю время выполнения запросов, обычное время выполнения 0.03 секунды. так же пару раз в 20-30 запросов оно скачет до 0.2, а раз в 200-500 запросов до 1 секунды. но это ничего страшного. а странность в том, что с 09:00 до 10:30 утра каждый день несколько запросов выполняются по 10, 15, а то и 60 секунд. в остальное время суток 1с максимум. опять же - как обьяснить именно это время? в cron на него ничего не поставлено. хостер?

нескольку запросов в секунду
highload

Я конечно не специалист, но если там не сотни/тысячи запросов, то стоит ещё подумать над тегами

zolden ★★★★★
()

highload...

Да ладно, даже на моих говносайтах у Маши примерно 500 запросов в секунду и всё норм.

Где находится сервак с бд? Если он далеко от сервера с приложением, то возможно данные рубятся по таймауту и все в таком духе.

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

вот конфиг:

[mysqld]
port		= 3306
socket		= /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 8M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 4

max_heap_table_size = 320M
tmp_table_size = 320M

# Point the following paths to a dedicated disk
#tmpdir		= /tmp/

slow_query_log=1
slow_query_log_file=/var/log/mysql_low.log
long_query_time=1


какие именно логи имеются ввиду? mysql_low.log единицы запросов.
Сервак с БД - это тот же сервак, все на одном.
Dart_Sitius
() автор топика

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

anonymous
()
Ответ на: комментарий от Erfinder
[--] Up for: 35d 4h 28m 37s (30M q [10.172 qps], 4M conn, TX: 64B, RX: 32B)
[--] Reads / Writes: 17% / 83%
[--] Binary logging is enabled (GTID MODE: OFF)
[--] Total buffers: 880.0M global + 12.4M per thread (151 max threads)
[!!] Maximum reached memory usage: 2.7G (115% of installed RAM)
[!!] Maximum possible memory usage: 2.7G (115.82% of installed RAM)
[OK] Slow queries: 0% (150/30M)
[OK] Highest usage of available connections: 9% (14/151)
[OK] Aborted connections: 0.00%  (26/4218691)
[!!] Key buffer used: 18.7% (75M used / 402M cache)
[OK] Key buffer size / total MyISAM indexes: 384.0M/121.0K
[!!] Query cache efficiency: 0.0% (654 cached / 3M selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (2 temp sorts / 404 sorts)
[OK] Temporary tables created on disk: 18% (441 on disk / 2K total)
[OK] Thread cache hit rate: 99% (292 created / 4M connections)
[OK] Table cache hit rate: 29% (30 open / 103 opened)
[OK] Open file limit used: 1% (17/1K)
[!!] Table locks acquired immediately: 90%
[OK] Binlog cache memory access: 0% ( 0 Memory / 0 Total)

в mysql.err много таких строчек:

150716 1:02:10 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Statement: DELETE FROM `tbl` WHERE `id`=16019077 LIMIT 1 и больше ничего

нагрузку на диск не измерял, но на VPS стоит SSD.

f1 и f2 - это строки

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

епт. руками из соснольки этот кусок дергал? желательно в цикле и на продкшн базе.

exception13 ★★★★★
()
Последнее исправление: exception13 (всего исправлений: 1)

Было такое с некоторыми говнопроксями. Если использовать HTTPS, проблема наблюдается?

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