Ясный кэш памяти на Amazon EC2

$(command) (как обобщенный синтаксис предполагает), замена команды - можно думать о нем как о заполнителе для дословного вывода команды. Следовательно:

$ ssh user@host < $(cat dep1.sh dep2.sh main.sh)

Обозначает что-то как:

$ ssh user@host < "#!/bin/sh
rest your dep1.sh script goes here
#!/bin/sh
rest of your dep2.sh script goes here
...
"
2
28.04.2014, 18:06
1 ответ

Поможет ли увеличение оперативной памяти?

Трудно сказать, не зная, почему ваши тесты успешны после выполнения этих двух команд ([118329] sync[118330] и [118331] drop_caches[118332]). TBH Я не думаю, что сброс кэша файловой системы - это то, что позволяет вашим тестам работать, если только ваши тесты не дают сбой из-за проблем с задержкой. Когда ядро замечает падение ниже [118333]min_free_kbytes[118334], оно начинает выселять самые старые записи из кэша, чтобы получить реально свободную память обратно, как минимум, на [118335]min_free_kbytes[118336]. Единственное исключение из этого процесса - страницы, помеченные как "грязные". Так что существование кэша файловой системы обычно не является проблемой, если только ваши приложения не выделяют память быстрее, чем кернел может найти записи в "чернослив" (в таком случае, в порядке возрастания [118337]min_free_kbytes[118338]).

Команда, которая, вероятно, делает больше всего для вас, это команда [118339] sync[118340], которая, вероятно, освобождает память, выделенную под буферы, используемые для асинхронного дискового ввода/вывода (а также удаляет [118341]грязные [118342] из всех записей в кэше файловой системы, делая их кандидатами на вытеснение в условиях малой памяти).

rpm -qa | grep release

Я ставлю шансы примерно на 80-90%, что добавление большего количества оперативной памяти было бы полезно [118344], но я не знаю, какие тесты вы выполняете, поэтому не могу сказать наверняка.

perl -a -n -e '$sum += $F[1] if $F[0] eq "Removed"; END { print $sum }'  filename(s)

Можно ли периодически очищать кэш? Будет ли это вызывать другие проблемы?

То, что вы здесь делаете, это в основном настройка производительности (или, по крайней мере, вы играете с настройками, доступными для этой цели). Настройки обычно делаются доступными, когда знание "правильного" ответа в общем считается невозможным/нецелесообразным. Если бы можно было создать общие правила о том, как должны работать вещи, они бы просто заставили программу делать эту вещь и оставили бы сисадмина в стороне от вопроса.

Все это говорит о том, что мы не можем на самом деле сказать с абсолютной уверенностью, что это не вызовет проблем для вас. Мы можем сказать [118347] это [118770] вероятно [118771] не вызовет [118772] потери функциональности [118773], но мы не можем быть уверены.[118348] Я бы сказал, что кэш файловой системы предназначен для улучшения производительности, так что заставлять приложения ждать, когда данные будут поступать с диска, когда они читают что-нибудь, вероятно, не желательно (хотя иногда это может быть нежелательно, но необходимо).

EDIT:

Просто прочитайте комментарий Эммануэля. Он поднимает хороший вопрос. Если у вас есть неиспользованное пространство подкачки, вы можете попробовать увеличить [118351]vm.swappiness[118352], чтобы увеличить предпочтение кернела подкачки из менее используемой памяти приложения. Если вам нужно больше места для подкачки (или нет) вы можете найти в Интернете инструкции по созданию разделов подкачки и файлов подкачки.

EDIT #2

Я не играл с этим, но глядя на документы ядра, есть [118355]dirty_ratio[118356] sysctl настраиваемый, который управляет тем, сколько грязных данных будет храниться в памяти до того, как ядро сделает свою собственную [118357]sync[118358], вы можете попробовать опустить его так, чтобы несколько страниц в кэше файловой системы были помечены как "грязные" и таким образом могли быть вытеснены, когда память понадобится.[117953].

2
27.01.2020, 22:13

Теги

Похожие вопросы