LINUX.ORG.RU
ФорумTalks

Минутка ненависти

 


2

2

Чтение байт-потока в autoresizable буфер целиком без всякого контроля над размером, а также реализацию такой возможности в языке без варнингов для особо невнимательных, нужно приравнивать к госизмене

tl;dr file.read() = расстрел

У меня все, продолжаю наблюдение

★★★★★

Просто купи больше ОЗУ.

Ещё можешь использовать FAT32, там не бывает файлов больше 4 ГБ.

KivApple ★★★★★
()
Ответ на: комментарий от i-rinat

Нет, девочка-тестировщик скормила системе офигенных размеров pdf. А кое-кто умный опять решил что память нынче дешёвая и парсер много не съест. Это уже просто далеко не первый случай когда я такое вычищаю

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

не бывает файлов больше 4 ГБ

Ещё лучше - читать в строку PostgreSQL, она не бывает больше 1 ГБ.

У нас тут ребятишки пытаются в JSON такое пихать и Питоном читать.

Toxo2 ★★★★
()

Теперь и в перле такое завезли, но по-приколу метод назвали slurp. Я бы постеснялся так писать.

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

девочка-тестировщик скормила системе офигенных размеров pdf.

Это хороший тестировщик. Систему нужно тестировать на экстремальные условия, чтобы понять, где у неё границы.

А то сейчас пишут софт, руководствуясь соображениями типа: «да кому вообще может понадобиться больше 100 записей в телефонной книге?»

i-rinat ★★★★★
()
Ответ на: комментарий от upcFrost

Нет, девочка-тестировщик скормила системе офигенных размеров pdf. А кое-кто умный опять решил что память нынче дешёвая и парсер много не съест.

Девочка-тестировщица умница, а чувак сочинивший этот парсер не очень и ему стоит поучиться у этой девочки) Потому что продолбал нефункциональные требования.

dvetutnev
()
Ответ на: комментарий от i-rinat

А то сейчас пишут софт, руководствуясь соображениями типа: «да кому вообще может понадобиться больше 100 записей в телефонной книге?»

Это ещё полбеды. Реальная жопа что когда говоришь людям проверить блин потребление памяти, в ответ слышишь «купи больше оперативки». Прям см выше канонiчный ответ

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

Да кто б спорил. Тестировщик молодец, эт да. Другое дело что такого г-на становится все больше и больше. Например родная питонячья либа для multipart email не умела (вроде завезли сейчас но не факт) слать аттач из потока, только из буфера. То есть: берёшь файл метров 10-20, засовываешь в память, конвертишь его в base64 (плюс х1.5), конвертишь его в ascii (ещё плюс столько же), переводишь в bytes (и еще раз). И большая часть этих махинаций внутри самой библиотеки, внутри блин самого вызова, потому все ссылки на месте и гц дойдёт туда позже. Так и получается сто метров чтоб письмо отправить. И это блин прям в официальных доках так нарисовано.

Да, с одной стороны 10 метров письмо это так себе. С другой это бизнес-требование, и блин было бы очень неплохо все эти вещи делать потоком, тем более что это возможно для каждой из операций.

В моем случае шляпа была ещё и в том что разработчик скормил весь буфер libmagic (вместо первых 4кб) чтоб определить mime аттача. И libmagic раздуло на полгига.

Короче все тлен пора домой

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

Можно и ext2/3 использовать. Там тоже лимиты по сегодняшнему времени не заоблачные.

lenin386 ★★★★
()

Не нужно никого расстреливать, нужно лишь внимательнее присмотреться к тз или юзкейсу.

У меня вот есть клиент, у клиента загружалка текстовых файлов, и скрипт в кроне, который периодически делает с загруженными файлами нечто нехорошее.

Ну и на кой хрен мне там ставить проверки размера, если в каталог /uploads текстовые файлы больше 2Мб не попадут by default ?

Конечно можно. Но зачем, это будет просто двойная работа.

Если бы это был не раз-в-пятиминутный скрипт, а какой-нибудь хайлоад с тысячами операций в секунду, то каждая лишняя проверка размера - давала бы определенную задержку что в масштабе хайлоада неизбежно привело бы к докупке памяти процессора.

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

Ну и на кой хрен мне там ставить проверки размера, если в каталог /uploads текстовые файлы больше 2Мб не попадут by default

Ага, это сейчас не попадут. А потом основной stakeholder захочет засунуть туда 5 метров вместо 2, обломится, набутылит ПМа, и ПМ побежит к тебе с криками «срочно». А потом 10, 20, 100500… знакомая тема

Это не хайлоад, это тестовое окружение. В проде ресурсы есть, но разбазаривать память все равно очень плохо. А то потом приходят тестирощики и спрашивают мол «username, а почему у нас тестовые бранчи шатает?». А потому блин что хреновый smtp-клиент раздуло на полгига, ещё полгига на minio, ещё монга+редис+vault, ну и бизнес-логика. Я не могу обосновать 8 гигов на каждое тестовое окружение (которых могут быть десятки), меня потом самого за это спросят

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

Просто не надо высасывать весь файл в память. Никогда.

Твои бы слова да разработчикам прикладных программ под Linux в мозг.

Хрен там с каким-то Python’ом, на который жалуется ТС, у него там специфичный довольно случай.

Но самый смех – это грёбанные HEX-редакторы в Linux-дистрибутивах. Что Okteta в KDE, что GHex в GNOME читают файл в тупо в RAM, напрочь перечёркивая собственно суть HEX-редактора.

Наговнокодили, а ты потом сиди и запускай нормальные HEX-редакторы под винду из-под Wine.

А потом все делают глупое выражение лица и спрашивают почему прикладуха уходит в Web, да потому что, блджад, Web-приложение http://hexed.it сделанное Web-макаками работает с файлами >2GB нормально, а поделки из KDE и GNOME которые накодили Linux-прикладники – нет.

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

Для sysfs это нормально и полезно. Просто надо лимит какой-нибудь поставить, вроде не более 2MB или вылетит эксепшн и покарает.

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

Потому что Hex редакторы нужны только виндузятникам – чтобы кряки изготавливать и реестр чинить. А Ъ-линуксоиды редактируют только текстовые файлы.

snizovtsev ★★★★★
()

Полностью согласен

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

Просто не надо высасывать весь файл в память. Никогда. И апи для этого непотребства уничтожить.

Что за дурацкая привычка грести всё одной гребенкой ?

Да есть полно задач, где файлы заведомо небольшого размера, высасывай-не высасывай.

Хотя если меня приспичивает программить (я не программист), то я чаще читаю файлы построчно, нежели весь в память, но делаю это не чтобы память экономить, а просто потому что так логичнее.

Вот только что специально открыл один из серваков. Скрипт обрабатывает полученный JSON-файл с фронт-ендов. Больше 512 байт - файлов нет. Проверки размера нет, файл читается в память.

[root@host ~]# uptime
 15:11:29 up 1659 days,  3:48,  1 user,  load average: 2.55, 3.16, 3.03
[root@host ~]# uname -rv
3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018
[root@host ~]#
windows10 ★★★★★
()
Ответ на: комментарий от EXL

О дааа )) Люто плюсую. Иногда сдуру открываю дамп в geany, а потом вижу что он паругигового размера. Иду пить кофе.

Хотя емнип виндовый нотепад говорит что файл больше какого-то размера и предлагает специфические инструменты для просмотра.

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

Да суть не в пистоне, суть в наплевательском отношении к ресурсам. Такое можно на любом языке написать. Вон жаба имеет readAllBytes - аналогично будет, чпок и добрый вечер. Или в крестах взял поток, взял строку, >>, туц-туц и в прод.

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

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

Иногда таки надо, к сожалению. Типичный пример из того что делаю сейчас - работа с pdf. Может быть прям очень дофига связанных объектов, все время бежать на диск за каждым значит убить производительность в ноль (разница на некоторых файлах 15с на диске против 0.5с в памяти). Приходится пихать в память и потом аккуратно чистить чтоб не протекло.

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

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

Дело в том, что если есть способ высасывать файлы целиком одной строчкой, то именно так кодеры и будут делать при любых обстоятельствах. Самый цимус, это когда либы так пишут, тут пример уже приводили.

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

Иногда таки надо, к сожалению.

Это понятно, сам тоже так делаю (когда никто не подсматривает).

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

Не знаю, я даже когда на говнопыхе говнокодю - так не поступаю. Построчно онли. Ведь это логично.

А профессианалы наверное еще лучше должны знать как читать файл.

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

Да хрен бы либы. Официальная документация. read(), чпок и в сеть. Потоком. Почему блин нельзя и читать тоже потоком - загадка века

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

Зависит от подкапотного транспорта. Например для tcp пофиг. Размер пакетов все равно ограничен 65к. Там только проблема в том, что это блокирующий вызов.

А о чем речь хотя бы?

Апд почитал. О питонах и файлах лучи счастья. Токмо не понял при чем тут потоки, если работа с файлами

ergo ★★★
()
Последнее исправление: ergo (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Может быть прям очень дофига связанных объектов, все время бежать на диск за каждым значит убить производительность в ноль (разница на некоторых файлах 15с на диске против 0.5с в памяти). Приходится пихать в память и потом аккуратно чистить чтоб не протекло.

Ты таки уверен, что это необходимо? Двух проходным разбором это не починится? Первый проход - собрать андефинед референсы, второй - зарезолвить. Оба прохода - скользящим окном. // Мимо разбираю трейсы с приложения по 150 гигов.

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

А потом основной stakeholder захочет засунуть туда 5 метров вместо 2, обломится, набутылит ПМа, и ПМ побежит к тебе с криками «срочно». А потом 10, 20, 100500…

так вынести в ТЗ, и чтобы 10 раз не править -> привязать как опцию системы, к службе/пользователю/etc, возможно даже с опцией менять на лету, без рестарта.

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

Депендс. У меня багрепорты по сценариям, которых не было в спущенном списке, вообще не принимали.

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

построчно

А там один минифицированный json ;)

bo4ok
()

Недавно новость проскочила в том же ключе: одному молодому человеку в результате забав с фаллоимитатором порвали подвздошную артерию, но при этом не повредили стенку кишечника.

Irma ★★
()

Нанял чуваков писать на пистоне и страдаешь теперь. Сам виноват, чо.

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

девочка-тестировщик скормила системе офигенных размеров pdf

Девочке премию. Разрабов на мыло.

no-such-file ★★★★★
()
Ответ на: комментарий от upcFrost

Почему блин нельзя и читать тоже потоком

Слишком сложно для питономакак.

no-such-file ★★★★★
()

это как в go/echo FormFile() ?

flant ★★★★
()

В отпуск тебе надо, или ипотеку заведи. Я тут уже 9-й месяц в старом говне ковыряюсь, по 3 месяца с перерывом на 2-недельные отпуска, и не такого насмотрелся.

aiqu6Ait ★★★★
()
Последнее исправление: aiqu6Ait (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)