вордпресс что-то записывает в /tmp, но не в файл

V
На сайте с 25.07.2006
Offline
128
1041

Здравствуйте, господа!

Столкнулся со странной ситуацией.

На сервере (CentOS 5) есть аккаунт с вордпрессом. Аккаунтом заведует полупродвинутый пользователь, любящий устанавливать всякие плагины и т.п.

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

Оказалось, что при запросах типа domain.com/2008/01/01/1234/ вордпресс что-то пишет в /tmp

Это видно по iostat. Примерно вот так:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

21,50 0,00 4,00 12,50 0,00 62,00

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 8,00 144,00 0,00 144 0
sda1 8,00 144,00 0,00 144 0
sda2 0,00 0,00 0,00 0 0
sda3 0,00 0,00 0,00 0 0
sdb 0,00 0,00 0,00 0 0
sdb1 0,00 0,00 0,00 0 0
sdc 0,00 0,00 0,00 0 0
sdc1 0,00 0,00 0,00 0 0
sdd 637,00 0,00 9264,00 0 9264
sdd1 637,00 0,00 9264,00 0 9264

В данном случае /tmp симлинком перенаправлен на диск sdd1. Если /tmp размещен на другом диске (через mount или симлинком) запись соответственно идет на него.

Запись продолжается в течении пары секунд.

Вся фишка в том, что файлы при этом не создаются. Ни простым многочисленным ls, ни даже с использованием auditd (типа auditctl -w /tmp ... или auditctl -w /mntsdd/tmp...) не видно, чтобы в /tmp создавался какой-то файл, в который шла бы запись.

Вордпресс я никогда серьезно не использовал, поэтом разобраться в нем для меня было бы несколько проблематично. Вменяемой информации от пользователя что делает его вордпресс добиться не представляется возможным.

Может кто-то предположить, что и куда пишется на винт?

Приватный linux-администратор
N
На сайте с 06.05.2007
Offline
419
#1

Например, временные таблицы mysql, которые представляют собой тут же удаляемые, но не закрытые файлы. Попробуйте несколько раз вызывать lsof | grep /tmp и может быть застанете момент и найдете что-то еще.

Есть такое мнение что для /tmp нужно использовать tmpfs. Память при этом не отъедается без необходимости, а запись на диск не ведется.

Кнопка вызова админа ()
M
На сайте с 16.09.2009
Offline
278
#2

Много кто, включая mysql (весьма вероятно ваш случай).

Иногда nginx туда кидает большие запросы (это как настроите его каталоги) - подобные файлы

можно посмотреть например lsof (или просто ls -l /proc/<pid>/fd/).

-->8--$ sudo lsof -p `pidof mysqld`|grep tmp

mysqld 22680 mysql 6u REG 254,4 0 6145 /tmp/ibGX1aiF (deleted)

mysqld 22680 mysql 7u REG 254,4 119 6146 /tmp/ib62N8h4 (deleted)

mysqld 22680 mysql 8u REG 254,4 0 6147 /tmp/ibCHC6ht (deleted)

mysqld 22680 mysql 9u REG 254,4 0 6148 /tmp/ibAEpsiS (deleted)

mysqld 22680 mysql 13u REG 254,4 0 6149 /tmp/ib0BNbrh (deleted)

-->8--

Если есть предположение именно на скрипты вордпресса - что мешает

сделать strace их?

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
V
На сайте с 25.07.2006
Offline
128
#3
netwind:
например, временные таблицы mysql, которые представляют собой тут же удаляемые но не закрытые файлы.
есть такое мнение что для /tmp нужно использовать tmpfs

Разве аудит не отловит незакрытые файлы?

Но в данном случае mysql вообще не причем - ему задана своя временная директория, в /tmp он не суется.

V
На сайте с 25.07.2006
Offline
128
#4
myhand:
Если есть предположение именно на скрипты вордпресса - что мешает
сделать strace их?

Как практически это сделать на продакшн-сервере с десятком сайтов со средней нагрузкой?

M
На сайте с 16.09.2009
Offline
278
#5
vapetrov:
Как практически это сделать на продакшн-сервере с десятком сайтов со средней нагрузкой?

допустим, скрипты у вас работают через mod_php.

тогда берем к-л чайлд апача и смотрим что-то типа:

strace -p <pid> -e trace=file

VO
На сайте с 27.07.2008
Offline
130
#6

[mysqld]

tmpdir=/самый_ненагруженный_диск/tmp

Попробуйте так, только директорию создайте предварительно и дайте права на запись пользователю от имени которого работает mysql.

V
На сайте с 25.07.2006
Offline
128
#7
myhand:
допустим, скрипты у вас работают через mod_php.

тогда берем к-л чайлд апача и смотрим что-то типа:
strace -p <pid> -e trace=file

Да, mod_php используется.

Но я хрен что там найду в этом логе - чилдов много и десятки запросов в секунду к серверу...

Это разве что рядом отдельного апача запустить, да с одним чилдом. Может так и попробую, если никто ничего более простого не предложит...

vapetrov добавил 26.01.2010 в 17:39

V(o)ViK:
[mysqld]

tmpdir=/самый_ненагруженный_диск/tmp


Попробуйте так, только директорию создайте предварительно и дайте права на запись пользователю от имени которого работает mysql.

Сказано же, tmpdir задан для mysql и показывает на отдельную папку. mysql тут не причем.

M
На сайте с 16.09.2009
Offline
278
#8
vapetrov:

Но я хрен что там найду в этом логе - чилдов много и десятки запросов в секунду к серверу...

Берете произвольный чайлд и смотрите. В конце концов к нему придут за нужным

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

как вариант - включать strace по триггеру проблемного события (резко возростает нагрузка на /tmp)

V
На сайте с 25.07.2006
Offline
128
#9

Спасибо, myhand, я попробую.

Но кто-нибудь пользовался auditd? Может кто-то пояснить, как может производится запись в директорию, а он этого не замечает?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий