Почему Linux не очищает кэши автоматически?

Напрямую сjq:

jq '{ starts: [ { attributeList: (.starts[].attributeList 
                                  | map(select(.name == "Command"))) }] }' file.json

Выход:

{
  "starts": [
    {
      "attributeList": [
        {
          "name": "Command",
          "value": "bash"
        }
      ]
    }
  ]
}
1
10.03.2020, 17:50
2 ответа

Потому что отбрасывание кэшей никогда не приносит никакой пользы. Забывание вещей не там, где выигрыш. Выигрыш в повторном использовании памяти, это произойдет в любом случае. Так как некоторые точечные данные будут вытеснены из памяти.

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

Поэтому вам нужно запустить задание без кэширования (к сожалению, я не помню команду для этого ).

3
28.04.2021, 23:20

Why doesn't Linux automatically clear caches?

Будет.

ron> free -g
             total       used       free     shared    buffers     cached
Mem:           504        415         88          1          0        352
-/+ buffers/cache:         62        441
Swap:            0          0          0

Кэшированная память по-прежнему считается свободной памятью.

Когда количество свободных ресурсов уменьшится до 0, они будут извлечены из кэша.

Could this harm the system in any way, or cause any negative effects?

вред = нет. Исследуйте echo 3 > /proc/sys/vm/drop_caches, и вы увидите, что это не -неразрушающая операция.

Негативным эффектом было бы снижение производительности из-за необходимости считывать с диска что-то, что находилось бы в кэше. Например, напишите программу на C, которая читает файл данных размером 10 ГБ. При первом запуске он будет медленным, потому что он читает с диска, но в любое время после этого будет намного быстрее, потому что этот файл данных кэшируется в оперативной памяти. Удалите кеш, и следующий запуск программы чтения файла данных будет медленным, как и в первый раз. Это легко наблюдать и повторять.

If the answer is no then why does not Linux run this command automatically by default?

Вы должны уточнить, как и где вы видите, как это происходит. Я не знаю об этом в текущем Linux, таком как RHEL/CentOS 7.7. Но в более старых версиях Linux (, таких как ядро ​​до версии 3.x ), возможно, это было решение, принятое этим дистрибутивом, когда кэширование не было таким надежным, как сейчас (, по моему мнению ). Используя SLES 11.4 несколько лет назад, я почти уверен, что люди SuSE не писали код, чтобы автоматически происходило это удаление кеша, но для некоторых рабочих серверов у меня были люди, у которых мы их купили, и настроили SLES для нас в то время, когда они сделали crontab делать периодическое кеширование отбрасывания, так что это серая зона, почему это делается. Я подозреваю, что это домохозяйство = хороший менталитет, и поскольку это никогда не бывает деструктивной командой, это не может навредить.Несколько раз я вручную выполнял echo 3 > drop_cachesна sles 11.4 для устранения неполадок, так как это никогда ничего не решало там, где в конечном итоге требовалась перезагрузка.

Ознакомьтесь с руководством по настройке производительности RHEL и настройке виртуальной памяти. Я не знаю, насколько это специфично для RHEL по сравнению с достаточно низким уровнем, чтобы быть связанным с ядром Linux, а не специфичным для дистрибутива Linux. Также то, что изменилось с ядра 2.6 на 3.x и 4.x, что, я уверен, важно в этом отношении, поэтому подумайте о том, чтобы прочитать примечания к выпуску ядра Linux.

2
28.04.2021, 23:20

Теги

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