Удаление кеша обхода каталогов, несмотря на то, что у меня много памяти?

Эвристическим образом см. https://stackoverflow.com/questions/12213445/identifying-kernel-threads

ps и top (от procps-3.28) не, используют "командной строки" в качестве проверки и не знают о PF_KTHREAD. Именно это инициировал их для добавления [``] к имени процесса это не часть фактического имени процесса. Так как командная строка находится под контролем самого процесса, возможно, что это было изменено.

Это зависит от как далеко назад (2.4? 2.2?) необходимо пойти. Быстрый хлам в нескольких системах не указывает ни на какой очевидный общий флаг (поле 9 /proc/PID/stat)

На последнем 2.6.x можно главным образом предположить родительский PID, являющийся 0 для [kthreadd], это часто будет иметь PID 2, и все потоки будут его детьми (init может иметь PPID=0 также). Или возможно (рано 2.6.x?) a [kthread] вместо этого, но не PID 2, но это может только быть родитель большинства, не все потоки.

Иначе должен осмотреть /proc/PID/maps (карта распределения памяти пространства пользователя), для потока ядра это будет пусто - поэтому как долго флаг процесса (в /proc/PID/stat) не &(PF_EXITING), /proc/PID/maps быть пустым является хорошим индикатором. Обратите внимание, что необходимо на самом деле читать maps, не просто stat() это, так как размер неверно передан как 0; и у Вас должно также быть разрешение, если Вы не делаете это может казаться пустым, не вызывая ошибку.

for pp in /proc/[0-9]*; do 
  if [ -z "$(< $pp/maps)" ]; then echo ${pp##/proc/}; fi; 
done 

Вы могли добавить подобное выражение для проверки этого cmdline также пусто.

3
03.08.2015, 20:14
1 ответ

Кэш, который имеет наибольшее значение для обхода каталогов, - это кеш inode. Это не входит в число «кэш», которое отображает free . Это часть данных ядра (« плита »). Вы можете увидеть, сколько памяти занимают различные пулы slab, в / proc / slabinfo (для этого требуется root-доступ). Вы можете использовать slabtop , чтобы увидеть, как они меняются в реальном времени, или этот фрагмент, чтобы получить отчет с размером каждого пула в байтах:

</proc/slabinfo awk '{print $1, $3*$4}' |sort -k2n

На типичной машине давление на кеш inode происходит из-за ночного updatedb job. Если вы найдете, как этого избежать, дайте мне знать .

Размер пула кэша inode не фиксирован, он определяется соотношением кэша метаданных на кэш данных: параметр vm.vfs_cache_pressure . Вы можете поэкспериментировать с этим - либо низкое значение (по умолчанию 100), чтобы хранить больше записей в кеше, чтобы записи из hg не смещались, либо высокое значение, чтобы записи от ночных заданий cron не остаются, чтобы загрязнять оперативную память.

Наконец, всегда есть способ запустить hg status в утреннем задании cron.

1
27.01.2020, 21:31

Теги

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