LINUX.ORG.RU

мониторинг записи на диск

 


0

1

Мониторил я одну программку с помощью iotop. И вижу, что она активно пишет на диск. DISK WRITE за сутки 4 Gb. Обложился sysdig . И ничего. не могу увидеть, куда же конкретно она пишет то. запускал так sysdig evt.type=write and thread.tid=1865455 |tee -a write.log - вообще ничего не выводит, хотя в соседнем терминале iotop -d 2 -u user показывает что этот tid прямо сейчас пишет, и активненько .

Если прям полостью смотреть: sysdig thread.tid=1865455 |tee -a write.log выводит какую то дичь вроде

3040174 19:28:43.018345344 1 MVStore (1865455) < futex res=-110(ETIMEDOUT) 
3040175 19:28:43.018346774 1 MVStore (1865455) > futex addr=7FFB94409028 op=129(FUTEX_PRIVATE_FLAG|FUTEX_WAKE) val=1 
3040176 19:28:43.018347314 1 MVStore (1865455) < futex res=0 
3040177 19:28:43.018355314 1 MVStore (1865455) > futex addr=7FFB94409078 op=137(FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET) val=0 

если родительский процесс смотреть sysdig evt.type=write and proc.pid=1865401 |tee -a write.log - редко редко есть запись в в файл. Но никак не 4гб за сутки.. в основном сетевая активность

1335029 20:03:02.680517847 12 pool-1-thread-3 (1865501) > write fd=16(<p>pipe:[19641492]) size=1                      
1335030 20:03:02.680518797 12 pool-1-thread-3 (1865501) < write res=1 data=.                                         
1335031 20:03:02.680527987 1 Thread-2 (1865471) > write fd=21(<4t>185.233.200.151:38356->192.168.4.21:9001) size=41   
1335034 20:03:02.680549087 1 Thread-2 (1865471) < write res=41 data=...%.... ...<4...Z...Y....9....1..S.VRO..        

Если lsof |grep 1865402 , и оттуда брать все файлы какие можно, то опять таки, никакой аномальной активности. sysdig evt.type=write and proc.name=java and fd.name contains /home/ |tee -a write.log

Кто подскажет, как же все таки вычислить , куда пишет программа ? Или это глюк iotop

Если lsof |grep 1865402

Ну уж lsof -p 1865402 или ls -l /proc/1865402/fd

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

оттуда брать все файлы какие можно

И по mtime файла смотрели, что он не изменяется?

mky ★★★★★
()

strace и пофильтровать на функции записи, отфильтровать ввод-вывод, функции open, mmap, unlink и пр.

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

Lsof в цикле так себе. У меня команда вида lsof -p 1865402 выполняется минуту где то.

ls -l /proc/1865402/fd в цикл, и смотреть просто, вдруг новый файл появится ?

mtime файла, что то не соображу что это. Как смотреть это вообще

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

mtime файла, что то не соображу что это.

Одна из дат файла, время модификации.

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

Да, хороша программа strace . Жаль, что сразу не стал ей пользоваться, а пошел по пути предложеному гуглом.

Итак, смотрим что вообще делает дочерний процесс

strace -p 1865455 -c

strace: Process 1865455 attached
^Cstrace: Process 1865455 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 90,04    0,224305          12     17417      8701 futex
  6,07    0,015121         360        42           pwrite64
  3,38    0,008419         841        10           fsync
  0,51    0,001260           2       570           pread64
  0,00    0,000008           4         2           ftruncate
  0,00    0,000001           0         8           lseek
  0,00    0,000001           1         1         1 restart_syscall
  0,00    0,000000           0         3           gettid
  0,00    0,000000           0         4           newfstatat
------ ----------- ----------- --------- --------- ----------------
100,00    0,249115          13     18057      8702 total

Подозрительная функция pwrite64 - запись в файл из буфера, смещение файла не изменяется.

Смотрим, и опа, бинго, вот она, постоянная запись

strace -p 1865455 -e trace=pwrite64 -y -tt |tee -a write_strace.log

19:17:21.964422 pwrite64(10</home/user/databases/txpowsql/txpow.mv.db>, "chunk:97d,block:453,len:b,map:b,"..., 45056, 4534272) = 45056
19:17:21.964530 pwrite64(10</home/user/databases/txpowsql/txpow.mv.db>, "chunk:97e,block:45e,len:b,map:b,"..., 45056, 4579328) = 45056
19:17:21.964626 pwrite64(10</home/user/databases/txpowsql/txpow.mv.db>, "chunk:97f,block:469,len:c,map:b,"..., 49152, 4624384) = 49152
19:17:21.964709 pwrite64(10</home/user/databases/txpowsql/txpow.mv.db>, "chunk:980,block:475,len:b,map:b,"..., 45056, 4673536) = 45056

А я уже в iotop стал сомневаться ))) .

Теперь вопрос, что делать? Какой то виртуальный раздел, который монтируется из области оперативной памяти?

SANyaSmol
() автор топика
Последнее исправление: SANyaSmol (всего исправлений: 2)
Ответ на: комментарий от SANyaSmol

Если я правильно понял, то у вас pwrite работате с дескриптором 10. Что в /proc/1865402/fd/10?

mtime файла, что то не соображу что это. Как смотреть это вообще

Ну, допустим, командой stat ИМЯ_ФАЙЛА. Я думал, что вы уже для всех открытых процессом файлов посмотрели их временные метки (Access/Modify/Change) и не нашли недавно изменённых.

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