Я не видел, что сегментация дает сбой ошибка снова, но я все еще вижу, что высокий ЦП прибывает из httpd. Я смог выполнить strace на процессе httpd с ЦП, и я получил следующее:
# strace -c -p 28964
Process 28964 attached - interrupt to quit
^CProcess 28964 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
88.94 0.006093 0 98299 4562 lstat
3.01 0.000206 0 2740 getcwd
2.28 0.000156 0 2158 2 read
2.26 0.000155 0 541 37 open
1.68 0.000115 0 1321 1321 readlink
1.52 0.000104 0 1678 822 access
0.32 0.000022 0 502 fstat
0.00 0.000000 0 25 write
0.00 0.000000 0 507 close
0.00 0.000000 0 547 478 stat
0.00 0.000000 0 23 poll
0.00 0.000000 0 2 rt_sigaction
0.00 0.000000 0 2 rt_sigprocmask
0.00 0.000000 0 2 writev
0.00 0.000000 0 3 setitimer
0.00 0.000000 0 1 sendfile
...
------ ----------- ----------- --------- --------- ----------------
100.00 0.006851 108381 7224 total
Эти 4 562 ошибки от lstat являются тем же типом ошибок и обнаруживаются как это на файле журнала:
# strace -f -t -o /var/log/strace.output -p 28964
strace.output
28964 07:10:38 lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
28964 07:10:38 lstat("/var/www", {st_mode=S_IFDIR|0755, st_size=94, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs/sites", {st_mode=S_IFDIR|0755, st_size=30, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs/sites/all", {st_mode=S_IFDIR|0755, st_size=66, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs/sites/all/modules", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs/sites/all/modules/views", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs/sites/all/modules/views/includes", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
28964 07:10:38 lstat("/var/www/vhosts/example.com/httpdocs/sites/all/modules/views/includes/sites", 0x7fff1e627370) = -1 ENOENT (No such file or directory)
Упомянутые выше папки являются всеми в этом каталоге веб-сайта и части CMS Drupal. Однако последний перечислен
/var/www/vhosts/example.com/httpdocs/sites/all/modules/views/includes/sites
не делает существует, и это должно действительно быть
/var/www/vhosts/example.com/httpdocs/sites
который действительно существует. Похож на lstat, пытается прочитать каталог, который не делает существует....?
-1 ENOENT (No such file or directory)
Каков был бы лучший способ диагностировать это и найти источник этой ошибки для недостающего каталога?
К сожалению, локальная сторона не будет уведомлена о принудительном отключении
. Должно быть, tcp-reset означает, что клиенту следует сообщить, что соединение закрывается. Если ваш клиент зависает при отправке сброса, это означает, что он неправильно обрабатывает сброс, отправленный обратно с вашего хоста, на котором запущены IPTables. Если у вас нет средств для решения этой проблемы, я не могу придумать, как вы можете этого добиться.
Вы можете настроить ваше приложение на таймаут.
Другим решением является настройка TCP KeepAlive и более частые проверки, например каждые 10 мин.
Некоторые приложения реализуют KeepAlive на уровне приложения. Например, SSH, apache.
Когда KeepAlive будет отправлен, а соединение будет закрыто на удаленном конце, вы получите RST, с удаленного конца.
Statefull брандмауэры забудут о соединении после периода бездействия. Это означает, что вы можете получить отброшенные пакеты и полуоткрытые соединения, когда у вас нет трафика некоторое время (30 минут или 1 час).
Думаю, лучше спросить о вашей конкретной проблеме, которую вы пытаетесь решить, чем о конкретном решении, которое вы пытаетесь реализовать.
.