Назад | Перейти на главную страницу

Как сократить время поиска с помощью больших файлов журнала?

Я часто имею дело с невероятно большими файлами журнала (> 3 ГБ). Я заметил, что производительность less с этими файлами ужасна. Часто я хочу перескочить на середину файла, но когда я говорю меньше, чтобы перескочить вперед на 15 миллионов строк, это занимает минуты ..

Проблема, которую я представляю, в том, что меньше нужно сканировать файл на наличие символов '\ n', но это занимает слишком много времени.

Есть ли способ заставить его просто искать явное смещение? например искать байтовое смещение 1,5 миллиарда в файле. Эта операция должна выполняться на несколько порядков быстрее. Если less не дает такой возможности, есть ли другой инструмент?

Вы можете меньше не считать таких строк less -n

Чтобы перейти в определенное место, например, на 50%, less -n +50p /some/log Это было мгновенно для меня в файле журнала размером 1,5 ГБ.

Изменить: для определенного байтового смещения: less -n +500000000P ./blah.log

Less, будучи пейджером, по своей сути ориентирован на линию. При запуске, если это большой файл, он скажет «подсчет номеров строк», и вы нажмете ESC, чтобы остановить это, но в противном случае он сделает строки. Это то, что он делает.

Если вы хотите перейти прямо в середину файла и пропустить начало, вы всегда можете просто выполнить поиск за начало; Я бы сделал что-то вроде tail -c +15000000 /some/log | less.

less похоже, есть небольшие накладные расходы от настроек локали

Если вы используете только символы ASCII, вы можете немного ускорить его, используя:

LC_ALL=C less big-log-file.log

В моем случае пропускная способность увеличилась с ~ 30 МБ / с до ~ 50 МБ / с (скорость зависит от ЦП).