Я запускаю php-скрипт локально в моем браузере Firefox. Ровно через 300 секунд я получаю страницу с ошибкой. «Проблема при загрузке страницы. Время соединения истекло. Сервер localhost слишком долго не отвечает». Скрипт все еще работает, но он кажется мне очень медленным.
Предположение: причиной появления страницы ошибки является тайм-аут Apache (так как он установлен на 300). Но я не понимаю, почему это происходит. Это не первый раз, когда я запускаю скрипт php, который занимает много времени. Иногда мои сценарии запускаются в течение нескольких дней. Этот конкретный скрипт читает данные публикации из таблицы InnoDB (350 тыс. Записей) и разделяет авторов по точкам с запятой. Эти имена авторов затем записываются обратно в другую таблицу.
1117 Простое увеличение таймаута не является решением проблемы. Мне нужно исправить то, что вызывает тайм-аут. Без сомнения, это также причина, по которой мой скрипт работает так медленно.
Я нашел причину медленных вставок: поскольку я использую InnoDB, я должен был обернуть свои вставки в транзакцию / коммит.
И возможная причина тайм-аута: при указании 127.0.0.1 в Unix вместо сокета UNIX будет использоваться TCP / IP.
На http://httpd.apache.org/docs/2.2/mod/core.html#timeout я могу прочитать, что «директива TimeOut определяет продолжительность времени, в течение которого Apache будет ожидать I / O при различных обстоятельствах: при чтении данных от клиента - время ожидания прибытия пакета TCP, если буфер чтения пуст. При записи данных клиенту - время ожидания подтверждения пакета. если буфер отправки заполнен. [...] ".
Я был бы очень признателен за любую помощь, такую как инструкции по просмотру определенного файла журнала или запуск определенной команды для получения дополнительной информации. Насколько я знаю, тайм-аут Apache связан с интернет-трафиком, но я ни к чему не подключаюсь, так что ... ну, я потерян. Google тоже не помогает.
Некоторая информация об окружающей среде:
Я использую 12,0 ГБ памяти 125,9 ГБ. Нет своп. Средняя нагрузка около 2,3. И еще 1,9 ТБ свободного дискового пространства.
Что я пробовал до сих пор:
127.0.0.1
вместо localhost 127.0.0.1:80
Всякий раз, когда я вносил изменения в файл конфигурации, я перезапускал apache2 и mysql.
Скрипт php:
set_time_limit( 0 );
ini_set( 'display_errors', 1 );
ini_set( 'memory_limit', '4G' );
error_reporting( E_ALL|E_STRICT );
$mysqli = new mysqli( 'localhost', 'root', 'mypassword', 'WoS_Mexico_1990-2014' );
if ( $mysqli ) {
$sql = 'SELECT `ID`, `AU`, `AF`, `C1`, `RP`, `EM`, `RI`, `OI` FROM `WoS`;';
if ( $result = $mysqli->query( $sql ) ) {
while ( $row = $result->fetch_assoc() ) {
// do some things such as explode strings into arrays
$sql = 'INSERT INTO ...';
$mysqli->query( $sql );
}
$result->close();
}
$mysqli->close();
}
У меня есть skip-name-Resolution в my.cnf.
В аналогичной теме кто-то опубликовал результаты netstat, так что вот мои.
daigu@Jiriki:~$ sudo netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 7423/mysqld
tcp 0 0 127.0.0.1:5939 0.0.0.0:* LISTEN 2256/teamviewerd
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2281/dnsmasq
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1247/cupsd
tcp6 0 0 :::80 :::* LISTEN 7390/apache2
tcp6 0 0 ::1:631 :::* LISTEN 1247/cupsd
mysqld находится на tcp, а apache2 на tcp6. Это проблема?
Просматривая различные файлы журнала, я заметил, что также страдаю от спама в UFW.
7 июня 13:34:29 ядро Jiriki: [88803.827685] [UFW BLOCK] IN = eth1 OUT = MAC = 01: 00: 5e: 00: 00: 01: 08: 96: d7: af: 89: 26 : 08: 00 SRC = 192.168.178.1 DST = 224.0.0.1 LEN = 36 TOS = 0x00 PREC = 0xC0 TTL = 1 ID = 0 DF PROTO = 2
daigu @ Jiriki: / var / log $ sudo ufw подробный статус Статус: активный Ведение журнала: включено (низкое) По умолчанию: отказать (входящий), разрешить (исходящий) Новые профили: пропустить
Кроме того, apache2 / error.log довольно большой. Последняя строка:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/http.so' - /usr/lib/php5/20090626/http.so: cannot open shared object file: No such file or directory in Unknown on line 0
[Пт, 06 июня, 19:32:12 2014] [примечание] Apache / 2.2.22 (Ubuntu) PHP / 5.3.10-1ubuntu3.11 с настроенным Suhosin-Patch - возобновление нормальной работы
Но это, кажется, старая проблема, которая впервые появилась 16 февраля.
Тайм-аут больше не возникает, хотя, насколько я знаю, я не внес никаких изменений в какие-либо файлы конфигурации.
1137] И чтобы ответить на вопрос Брайама: в логах Apache не было ничего, что указывало бы на неправильную конфигурацию. Все работало просто отлично, и скрипт php продолжал работать (как и должно быть), даже если мой браузер показывал Timeout.