LINUX.ORG.RU

Похоже я нащупал как обуздать Firefox и скармливать ему чуть-чуть памяти

 , , ,


6

4

Фокс конкретно достал своим прожорством. Шестнадцать гигов, а я постоянно вижу как всё свапится из-за этого гада. (и не гыкайте мне тут, все браузеры ведут себя одинаково) Ладно бы я что-то сложное делал. Но он явно не отпускает страницы из памяти, хотя уже и выставил кучу всяких уловок. Но вот что мне не давало покоя - этот гад видит сколько в компе памяти и не собирается останавливаться пока не выжрет всё. В результате все программы должны по стеночкам обходить. А тут вы со своими спорами про systemd. И придумал я гадкое, засунул фокса в персональную группу с ограничениями. Сделал так: Создал директорию ~/.config/systemd/user/app-firefox@.service.d/ В ней файл override.conf со следующим содержимым

[Service]
MemoryHigh=1.5G
MemoryMax=4G
MemorySwapMax=0

Перезапустил всё и стало хорошо на душе, фокс стоит на полтора гигах, как вкопанный. Но только включил ютуб, переключился на другое окно с другой вкладкой в другом фоксовском контейнере и всё дико тормозить стало. Я поднял до 2.5G, стало полегче, но всё равно, дойдёт до черты и тормоза лютые сразу. И тут я понял, что он смотрит куда-то в meminfo насчёт доступного рама, но не видит ограничений системды. И поэтому сходу влетает в ограничение, полагая, что все 16 гигов его. Тогда я создал фейковый ~/.fake_meminfo в домашней папке где заменил MemTotal: 4194304 kB и произошло чудо. Всё стало вполне сносно. Но вдруг внезапно он стал падать после нескольких видео на ютубе. Видимо недостаточно я ему наврал. Тога я попросил у ИИ сгенерить meminfo чтобы было похоже, что мы подходим к границе доступной памяти. Вот такой файл ~/.fake_meminfo в итогу получился

MemTotal:        4194304 kB
MemFree:          350000 kB
MemAvailable:     512000 kB
Buffers:           50000 kB
Cached:           600000 kB
SwapCached:            0 kB
Active:          2500000 kB
Inactive:         800000 kB
Active(anon):    2000000 kB
Inactive(anon):     4000 kB
Active(file):     500000 kB
Inactive(file):   800000 kB
SwapTotal:      15580020 kB
SwapFree:       15580020 kB
Dirty:              1000 kB
Writeback:             0 kB
AnonPages:       2000000 kB
Mapped:           400000 kB
Shmem:            150000 kB
Slab:             300000 kB
CommitLimit:    22656768 kB
Committed_AS:   15171448 kB
DirectMap4k:      800000 kB
DirectMap2M:     3000000 kB

а файл override.conf стал таким

[Service]
MemoryHigh=2.5G
MemoryMax=4G
MemorySwapMax=0

# "Обман" - подмена файла для Firefox
BindReadOnlyPaths=/home/pchelobiaka/.fake_meminfo:/proc/meminfo

И… иии… вроде работает. Полноценный Фокс с контейнерами, по собственной воле держит около 2 гигов и не больше.

Спешу поделиться наблюдением. Пробуйте кому интересно. И может что дельное подскажете.

Впервые в жизни придумал как использовать systemd. Хоть и можно было без него, но раз уж он есть, то пусть хоть что-то делает для меня полезное.

Upd.: Важное дополнение. При рассчёте занимаемой памяти я беру не просто размер процесса firefox, но суммы всех процессов фокса вместе взятых. Как оказалось люди не поняли сразу и пфыкают :)



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

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

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

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

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

Браузер не забыл что надо ещё и CPU пожрать, а не только память. :)

Всё совсем не так. Страницу без картинок (и тем более без видео) нарисовать очень даже можно

Только всё равно надо распарсить весь HTML целиком, и загрузить CSS. Про JS вообще молчу.

Да и сейчас, если картинки ещё не успели скачаться, показу страницы это не мешает.

Показу страницы мешает даже незагруженный CSS, не говоря уже о JS и тем более картинках с видосиками

Браузерописатели как раз не были удовлетворены W3C, и поэтому сделали свой альтернативный комитет WHATWG. И вся дичь лезет как раз из последнего.

T.е. ты хочешь сказать что W3C не имеет отношения ко всяким HTML5 и прочему?

Да они там все долбанутые.

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

Только всё равно надо распарсить весь HTML целиком, и загрузить CSS. Про JS вообще молчу.
Показу страницы мешает даже незагруженный CSS, не говоря уже о JS и тем более картинках с видосиками

То, что браузеры ждут css перед рисованием - это только особенность реализации. Технически ничего им не мешает нарисовать страницу без css, а по мере его подгрузки применять стили и перерисовывать. Вроде даже можно такое на js реализовать (чтобы css подгружалось скриптами и браузер не знал о том что оно вообще должно быть и рисовал страницу сразу). Без js да, нельзя, потому что в js могут быть всякие document.write или вообще манипуляции dom-объектами, а их задним числом применять к уже имеющемуся html намного сложнее, особенно если таких js несколько. Но - можно нарисовать ту часть страницы, которая побайтово идёт раньше тега <script>, не ожидая ни догрузки скрипта, ни даже догрузки html. Старые браузеры так и делали, новые почему-то разучились. А может не разучились даже а просто глючно это делают т.к. такие случаи никто не тестирует.

Незагруженные картинки точно не мешают, не знаю как это можно было не заметить.

T.е. ты хочешь сказать что W3C не имеет отношения ко всяким HTML5 и прочему?

Я не очень разбирался в их взаимоотношениях, но инициатива нововведений у WHATWG. W3C, кажется, в итоге фиксирует имеющееся положение вещей, т.к. разрабатывать стандарт, который всё равно никто не будет реализовывать, печальное занятие. Но у W3C, пока инициатива была у них, тоже были не очень хорошие идеи - например они хотели внедрить везде XHTML вместо HTML. То, что XHTML похоронили - заслуга WHATWG, как я считаю, положительная.

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

Он о том что ты участник сговора браузерного жора памяти, а тут притворяешься в жертву.

Так тут каждый первый такой же участник этого сговора т.к покупает озушку десятками гигабайт

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

Насколько я посмотрел, нет, MAFF сохраняет файлы, может быть немного модифицированные, а я имел ввиду сохранение состояния страницы в виде, пригодном для продолжения пользования вкладкой - то есть дамп текущего DOM (он может не иметь ничего общего со скачанным html-исходником), и полного js-контекста (все переменные, функции, настроенные обработчики событий и таймеры). Насчёт DOM я не уверен что он полностью представим в виде html.

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

Именно отрендереную страницу он и сохранял. Был ещё вариант в Опере выключать скрипты после загрузки страницы. Как с сохранением этого было не помню.

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

Я об этом и говорил, нужно что-то повесить, чтобы отслеживало. Только для этого надо понимать что фоксу важно а что нет. Раз ты написал такую штуку, то вот и впихни туда отслеживание и сопоставление. При каждом обращении фокса будет химичить.

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

Если приложение течёт (я так понял, у ТС такая проблема. У меня её нет, ff ест памяти пропорционально количеству открытых вкладок, а при их закрытии/выгрузке — нормально отдаёт, никаких «трупиков), то докупать память бесполезно. Ну проработает он вместо условно одного дня два, пока всё не выжрет. Ещё докупишь — выжрет через четыре. А докупать терабайты, чтоб до типичного аптайма дотянуть — цены кусаются.

Ну и проблема-то как раз описана ровно противоположная: чем больше памяти доступно, тем больше он жрёт. Вот это уже давно «общеизвестный факт». Так что допкупка памяти не решает, а усугубляет проблему, и логичнее было бы советовать тогда купить вместо той памяти, что есть, две планки по 2 ГБ.

Вот что было бы не проще, но интереснее, так это выяснить, почему он течёт. Я бы даже согласился на ответ «потому что современные браузеры говно», но почему у меня не течёт тогда?.. Может я что-то накрутил в about:config уже давно, а может вообще потому что у musl, а не glibc (вряд ли из-за этого, но кто его знает), может ещё почему…

P.S. У меня он при моём типичном использовании потребляет 2-3 ГБ — это с учётом дурацкого Telegram, который мне нужен только для ЛОРа, и вкладка которого в одну харю жрёт 400–600 МБ. Если открыть десяток вкладок с ютубом (это второе самое тяжёлое из известного мне), то потребленгие увеличивается до 4–5 ГБ, но как только я их закрываю или выгружаю, потребление памяти возвращается к обычным 2–3 ГБ, без всяких «трупиков просмотренного неделю назад видео». Может не моментально, но в течение 10–20 секунд. Меня такое потребление устраивает. Я пробовал его ограничивать, но тогда снижается скорость/отзывчивость — всё ещё работоспособно, но уже не так приятно пользоваться — посему не вижу в этом смысла. Здесь мозилла в принципе как раз попала в аудиторию своими хитрыми дефолтами, зависящими от общего объёма RAM — именно 2–3 ГБ в норме я и готов отдать браузеру.

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

Если честно уже давно не слежу за потреблением, перезапускаю ff в основном при обновлениях. На машинах с 32Гб бывает в swap лезет, но редко. В последнее время, после перехода с tst на sidebery, не помню чтобы такое случалось.

чем больше памяти доступно, тем больше он жрёт

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

две планки по 2 ГБ

Может быть по 32Гб?)

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

две планки по 2 ГБ

Может быть по 32Гб?)

Нет, тогда он станет жрать не меньше, а больше. Чтобы жрал меньше — именно по 2.

Или ограничить программно, как тут и предлагается.

Ну или искать причину утечки. Раз у одних пользователей она есть, а у других нет, значит должно быть возможно выяснить, почему, без полного аудита кода всего этого монстра. У меня он памяти потребляет умеренно, но главное — отдаёт сам — как и у тебя, если я правильно понимаю. А вот у ТС, похоже, нет — у него какие-то «трупики от просмотренных неделю назад видео» по его словам. А это уже не просто потребление памяти пропорционально количеству открытых вкладок (тут можно спорить, нормальное оно на вкладку, или нет, но проблема не в этом основная), а именно течь. И вот хорошо бы понять, как от неё избавиться. Решение с ограничением через cgroups и подменой meminfo — рабочее, судя по всему, но костыльное. По-хорошему, надо найти причину утечек.

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

Очень трезвый комментарий. Спасибо. Мой первый шок был когда я докупил в свой комп не 2, а 4 гига памяти. И он стал загружаться дольше. Это было во времена первого Туриона и желехных хардов. Я думал частоты памяти не те, но оказалось всё просто, линукс грузит больше кэшей. Браузеры тогда еши несопоставимо меньше, но и тогда браузеру стало от памяти легче совсем ненадолго. Это работает и в браузере и везде в операционкке - больше памяти, больше кэшей. Некоторая польза от этого есть, но не так замечательно как себе представлют люди.

И я не ставлю себе больше памяти сейчас по двум причинам - судя по описанию на мой комп нельзя поставить больше. Хотя я в шоке, брал «на вырост», Дегион с райзеном 5060чего-то. думал позже закину больше (нужно совсем не для браузера). И вторая причина цена - ну жаба душит брать за столько :)) Я бы рискнул, ну не верю что комп больше не съест, но вдруг. А деньги (такие) уплачены.

Что течёт не знаю, конечно, но все мы постоянно слышим стоны и вопли про невделбенную жручесть браузеров, оно есть, это факт с которым не поспоришь. Я думаю тут не одна и не две причины или стечений обстоятельств, так сходу не решишь. Это как считать звёзды в галактике. Можно долго пялиться в мелкоскоп считая поштучно звёзды, разрабатывая мелкоскопы для мелкоскопов, а можно взять общее свечение и поделить на взятую с потолка константу и взять за это нобелевку. И если с астрономами в этом я в корне не согласен, то в данной проблеме мне кажется совершенно приемлемым. Вот я взял и сработало. Значит этот хаос всё ещё управляемый. Значит имеет смысл умным людям копать глубже. Я никто и на багтрекере фокса можно найти стопиццот тем от никтов про сокращение потребления и тут же станет понятно - у разрабов это совсем не в приоритете и даже наоборот. Меня не послушают точно также как и их всех. А вот если вы, достопочтенные кроты, посчитаете, сделаете из этого толковое, впихнёте им это туда куда надо, я скажу вам огромное спасибо. И приглашу на рюмочку кофе.

а может вообще потому что у musl, а не glibc А ты на Альпине какомнить сидишь?

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

По-моему, вы там делаете что-то очень странное, если вам надо страницу по полгода держать. Все эти workflow можно исправить и работать нормально, чтобы не было такой потребности.

то есть дамп текущего DOM (он может не иметь ничего общего со скачанным html-исходником), и полного js-контекста (все переменные, функции, настроенные обработчики событий и таймеры)

Зачем это все нужно?

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

Почему странно-то? Вот я читаю статью, появились дела, отложил. Следом работа, начата, но не могу докончить, чего-то не хватает, вспомогательная информация висит, чтобы не искать снова. Собственные интересы на которые никогда нет времени, всё висит и ждёт своего времени. Я месяц назад искал одну тему, сорвали и так и не вернулся, а она висит, ждёт. Это хаос? да. Возьми мелкоскоп и посмотри куданить в мох, в почву. Там везде бардак. Это называется жизнь. Есть люди имеющие чёткие направления и условия позволяют им держаться плана. тут не столько собственных качеств человека (которые конечно есть и очень похвальны), сколько условия.

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

Следом работа, начата, но не могу докончить, чего-то не хватает, вспомогательная информация висит, чтобы не искать снова.

В течение полугода не можешь закончить? Значит и не надо.

Собственные интересы на которые никогда нет времени

Так может и не надо. Смысл тогда держать это открытым, если нету времени. Появится время, тогда не составит труда открыть.

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

James_Holden ★★★★★
()

Что вы такого делаете с браузерами, господа?

               всего        занят        своб      общая  буф/врем.   доступно
Память:         15Gi       6,7Gi       412Mi       1,1Gi       9,5Gi       8,6Gi
Подкачка:      511Mi       4,0Mi       507Mi

Запущены: огнелис с лором и парой вкладок, хромой с гитхабом и парой рабочих страниц, сборка в докере с пачкой контейнеров, пара электрон-приложений, IDEA. Что я делаю не так?

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

Хотя я в шоке, брал «на вырост», Дегион с райзеном 5060чего-то. думал позже закину больше (нужно совсем не для браузера). И вторая причина цена - ну жаба душит брать за столько :))

Ты точно не троллишь?) Это что за такой комп на вырост? У меня в домашний ноут 15-летний влезло 16Гб, в десктоп 10-летний 128Гб. Конечно, бралось это всё за смешные на сегодняшний день деньги, но и сейчас можно поискать приемлемые цены, так пару недель назад брал 32 Гб за 15 тыр.

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

Мы все живём в реальном мире, тебя никто не считает лаборантом в вакууме :) но это как с солью в воде, она выпадает только в определённых условиях. Одни стучат по стаканчику, вроде то же самое, а она не выпадает :)

Я рад, что у тебя с психикой всё хорошо. завидую. А у меня бардак. Наверное надо держаться порядка, я иногда закрываю всё, но потом жалею. Даже среди закладок потом трудно искать куда я там что лазил. Хм. Может нужны тематические закладки? Но от «ютубов» это не спасёт.

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

У мене лаптоп. И я когда брал не ожидал, что будет ограничение. Я даже среди запчастей его вижу только варианты 8 гигов и 16 гигов. Может по питанию ограничение? Не знаю. Но уже не раз так бывало, что производители занижали цифры по своим соображениям. Я когда-то обязательно попробую купить и вставить, просто не сейчас, не о том заботы. И браузерам я их отдавать точно не буду.

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

Я рад, что у тебя с психикой всё хорошо. завидую

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

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

@firkax вот щас я опять предъявлю за эмодзи :)

Вот ты ставишь фейспалм, но… Вот реально, нахрена?
У меня есть такой товарищ, в браузере треш угар и содомия в виде нескольких сотен открытых вкладок. И я каждый раз с недоумением наблюдаю, как он судорожно тыкается по ним, пытаясь найти нужную, теряет её, открывает снова заново и через две минуты повторяет все это по кругу.
И он такой не один.

Дичь какая-то, зачем так жить?
У меня открыты только нужные вкладки, с которыми я работаю в текущий момент. Все лишнее сразу закрывается и не мозолит глаза.

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

На домашнем ноуте 32. Работаю так же.

Ну вот наверняка там firefox чуть больше потребляет, чем там, где 16. Оно просто так работает.

Вообще у меня тоже всё нормально, и тоже всё устраивает. Сейчас вот так:

               total        used        free      shared  buff/cache   available
Mem:            31Gi       4.9Gi       5.7Gi       1.0Gi        22Gi        26Gi
Swap:          4.0Gi       4.8Mi       4.0Gi

Но кроме FF запущен только торрент-клиент и IRC-клиент из серьёзного (понятно, что всякие композиторы, панели и терминалы с htop’ами и подобным не упоминаю). При этом именно FF и отожрал больше всего — 2 гига с лишним. Не затащили бы вы меня в свою телегу, было бы ещё на полгига меньше. Но вот на системе с 8 GB RAM, он бы уже где-то 1.5 потреблял, а на системе с 2 GB total, ещё меньше.

Я к тому, что сравнивать потребление памяти браузером на разных системах с разным общим количеством ОЗУ — довольно бессмысленное занятие. Оно напрямую зависит от того, сколько памяти доступно.

Что именно они делают, что он у них все 16 ГБ выжирает, или что не отдаёт память после закрытия или выгрузки вкладки — я не знаю. В идеале вот с этим бы разобраться. Я могу понять десятки открытых вкладок (хотя у самого редко бывает открыто больше, чем 10, и когда столько, то это обычно что-то лёгкое с текстом), но проблема в том, что (по словам ТС), он у них и после закрытия ненужных вкладок память не отдаёт («трупики просмотренных неделю назад видео» и вот это всё) или отдаёт не всю.

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

выше несколько страниц это уже обсуждали

Просмотрел по диагонали.
Увидел только двумя комментами выше на эту тему, и то там обоснование уровня «я люблю бардак».

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

Открытые вкладки это очередь на рассмотрение. Кроме открытых вкладок она нигде не отражена, потому что удобных инструментов (которые бы сами на себя не расходовали кучу времени дополнительно) для составления этой очереди не существует, вкладки до сих пор остаются самыми подходящими, несмотря на все их минусы. Очередь длинная (вплоть до годов) потому что ни на что не хватает времени. Бардак - одна из причин происходящего, да, но возможности его устранить по совокупности обстоятельств нет.

А да, и «судорожно искать вкладки» не нужно, при вводе ключевых слов или части урла в адресной строке фф сам находит вкладки и предлагает на них перейти. Ну и + некоторая структуризация есть по открытым окнам, сейчас 9 окон открыто.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от Zhbert

Нет. Не ассоциируй нас с твоим нервным товарищем. Я совершенно спокойно спокойно живу с 20-30 вкладками и знаю где что. у меня о каждой теме окно. Просто это долгоиграющие окна. Но закрыта тема и окно закрывается. Сейчас поиск стал отвратительным, надо ценить то что нашёл :)

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

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

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

При этом именно FF и отожрал больше всего — 2 гига с лишним.

Мне кажется ты считаешь только размер процесса firefox, ты их в кучу собери. Ни торрент ни ирка тебе и трети этого не осилили бы.

Кстати. На что у нас делится память? Ведь теперь браузер думает, что вся память его, гном/кодое думают что вся видяха их, а ведь встройка (что интел что амд) ест системную память и ест произвольное её количество, сколько там гном решит слоёв и плоскостей текстурами 4К для своего калькулятора выделять. А ведь с появлением браузерных акселератов и браузер начал туда активно сало складывать, что не учитывается вообще никем и нигде. Эту строчку «авайлябля» надо очень осторожно воспринимать. У тебя 32 гига, а у меня 16 и я не представляю сколько в данный момент отожрала видеопамять, в которой с появлением compute тоже можно интересным заниматься. Тоесть от моих 16 откушено было 7-8 браузером (считая целиком, все его процессы), а видяхой с другой стороны столько же. И вот я запускаю Фрикад, он тонюсенько пролазит между стеночек, а на него с обоих сторон - местов нет! Потому что если памятью со стороны программ кто-то хоть както занимается, то в видяхе творится полная анархия и там гном бегает с ножичком и орёт «ну кто ссуке?».

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

Нет, у меня точно сменная, я уже открывал. Это потом легионы с припаяной пошли и как раз в магазине был поновее с припаяной 16 и мой со сменной. Одно жалею, надо было брать тот поновее потому что он был чисто на амд, без энвидии. Даже странно, тоже Легион. Хотя, сейчас в энвидии ламу поселил, да кудахтательные рассчёты койкакие. Но ведь придёт время, придётся его на нуво переводить?

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

А можно как-то это дело решить на лоре? Чтобы не переносило строки,

О нет, не надо!

я лучше в бок прокручу

А я нет.

В этом конкретном случае может оно и лучше бы было так, но это же просто «код», вывод терминала. Будут этим злоупотреблять некоторые, а новички криво копипастись огромные тексты туда, и будет очень неудобная и мешающая горизонтальная прокрутка там, где она не нужна.

Хотя наверное можно её добавлять только при определённой ширине окна (меньшее 800 пикселей или типа того?).

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)