LINUX.ORG.RU

печальная правда про гнутые утилиты


0

0

# export LC_ALL=C
# cat /var/GFE/tmp/cerrs40.tru | grep exit_group
16886 exit_group(0) = ?
grep: memory exhausted

То же самое awk:

# cat /var/GFE/tmp/cerrs40.txt | awk '/exit_group/'
16886 exit_group(0) = ?
awk: (FILENAME=- FNR=1248) fatal: grow_iop_buffer: iop->buf: can't allocate -2147483646 bytes of memory (Cannot allocate memory)

Файл конечно не маленький:

# ls -lh
/var/GFE/tmp/cerrs40.txt -rw-r--r-- 1 root root 1.3G Jan 25 17:36 /var/GFE/tmp/cerrs40.txt

это текстовый файл -- лог strace

Так какого хрена переполняется память, если это чисто потоковая построчная обработка.
То есть в каждый момент нужна только ОДНА ТЕКУЩАЯ строка.

★★★★★

> Так какого хрена переполняется память, если это чисто потоковая построчная обработка. > То есть в каждый момент нужна только ОДНА ТЕКУЩАЯ строка.

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

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

> может быть в файле есть очень длинная строка?

это лог strace -- там не должно быть длинных строк.

К сожалению, я не знаю как узнать макс. длину строки. Сперва у меня упал grep, и я хотел с помощью awk как раз посчитать макс. длину строки. Но awk тоже упал..

dilmah ★★★★★
() автор топика

А зачем делать cat | grep, когда grep сам может файлы обрабатывать?

у grep'а есть опция --map, попробуй.

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

сорри, вопрос снят..

Сделал od:

0332060 000000 000000 000000 000000 000000 000000 000000 000000
*

то есть там пустое место из нулей неизвестного размера..

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

> --line-buffered

скорее всего, это к теме не относится. Это просто вызов setvbuf(). Полезно, когда входные данные приходят медленно и построчно, а тебе нужно без задержек выводить результаты на выход.

полезно здесь:

for i in `seq 10`; do echo a $i; sleep 1; done |grep --line-buffer 'a' |cat

alexsaa
()

Вероятно, там одна дли-и-и-нная строка, так как я обрабатывал 2Гб файл squid'a без проблем

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

ну да, я выше уже писал что все объяснилось.

Это оказался sparse файл, и там были огромные дыры.

А sparse он оказался потому что strace запускался в кроне, и реально получилось что в один файл писался strace нескольких процессов.

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