разница в используемом пространстве на жестком диске, как показано df и du огромный! [дубликат]

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

Требуется ли, чтобы браузер оставался на экране после отображения последней вкладки? Если нет, то pkill midori между двумя строками done . Если да, то pkill midori; midori $ {САЙТЫ [i]} и . Или в цикле for : ["$ i" == "$ {# SITES [@]}"] && pkill midori непосредственно перед запуском midori . или цикл от 0 до $ (("$ {# SITES [@]" - 1)), затем уничтожение и запуск финального мидори после первого done .

Или, возможно, самый простой, просто pkill midori сразу после оператора while (если midori не запущен, сообщение об ошибке не выводится, и ничего не происходит, если вы работает с set -e ).

Если у вас не установлен pkill (он находится в пакете procps в debian и raspbian), вы можете захватить PID процесса midori всякий раз, когда он будет убит и перезапущен , и убейте этот конкретный PID. например

while [ 1 ]; do
  mPID=0

  for ((i=0;i<"${#SITES[@]}";++i)); do
    midori "${SITES[i]}" &
    [ "$mPID" -eq 0 ] && [ -n "$(jobs -n)" ] && mPID=$!
    [ "$mPID" -eq 0 ] && echo "couldn't start midori" && exit 1

    # sleep for for display time if set, otherwise 30 secs.
    [ -n "${TIME[i]}" ] && sleep "${TIME[i]}" || sleep 30
  done
  kill "$mPID"
done

Это не только получает PID любого нового запущенного процесса midori ( $! - это PID самого последнего фонового задания), но и проверяет, был ли он запущен . Если midori не удалось запустить по какой-либо причине, он выйдет с сообщением об ошибке.


Если бы вы не работали с rpi, вы могли бы добавить в свою систему больше ОЗУ, если это вообще возможно. Это довольно дешевый способ повысить производительность и скорость отклика системы, и любая «неиспользуемая» оперативная память будет использоваться ядром для кэширования ваших дисков.


Я написал сценарий, который может вам пригодиться, под названием mem-pigs.sh , чтобы подсчитать использование памяти указанными программами. по умолчанию используются браузеры, которые я использую регулярно (потому что они потребляют много памяти).

#! /bin/bash

# print total RSS memory usage for program(s) with multiple pids

# set default if no args
[ -z "$1" ] && set -- chromium firefox midori

for p in "$@" ; do
  printf "%s:\t%s %s\n" "$p" $( 
    ( printf '1024*(%s)\n' \
        $(awk '
               BEGIN {if (ARGC==1) { print 0 ; exit } };
               /VmRSS:/ {print $2}
              ' \
            $(pgrep "$p" | sed -e 's:^:/proc/:;s:$:/status:') | 
          paste -sd+)
    ) | 
      bc | 
      human-numbers.pl)
done

пример вывода:

$ mem-pigs.sh
chromium:   9.81 GiB
firefox:    1.39 GiB
midori: 2.76 GiB

midori , вероятно, использовал бы больше, если бы я использовал его как браузер общего назначения, но я использую его исключительно для facebook и ни для чего другого. Chrome и Firefox для случайного просмотра интересующих меня вещей.

Хром - настоящая свинья. на данный момент он использует только 10 ГБ, но это потому, что я перезапустил его несколько часов назад из-за обновления (до этого было около 14 ГБ). то же самое для firefox , обычно это около 4-6 ГБ. Но я оставляю их работать на несколько недель или месяцев одновременно с дюжиной или тремя вкладками в каждом окне в 20 или более окнах в каждом.каждое окно в основном посвящено определенной теме, о которой я читаю.

Я был в ужасе, увидев, сколько конкретно хрома было использовано ... потом я подумал, что «удвоение моей оперативной памяти до 32 ГБ - это всего лишь 100 долларов». теперь мне все равно. Я бы увеличил объем памяти до 64 ГБ, если бы моя материнская плата была DDR4 или 32 ГБ DDR3 DIMMS не были неоправданно дорогими.

mem-pigs.sh использует другой скрипт, human-numbers.pl :

#! /usr/bin/perl

use strict;
use warnings;

my $units = 1024;
my @suffixes=map { $_ ne 'B' && $_ } qw(B KiB MiB GiB TiB PiB EiB ZiB YiB);

if ( (@ARGV) && (($ARGV[0] eq '--si') || ($ARGV[0] eq '-s' )) ) {
  shift;
  $units = 1000;
  @suffixes=map { $_ ne 'B' && $_ } qw(B KB MB GB TB PB EB ZB YB);
};

# Use stdin and/or command-line args as input
# NOTE: command-line args are processed AFTER lines from stdin)
# TODO: option to process args BEFORE STDIN.
my @input = @ARGV;
@ARGV=();

if ( -p STDIN ) {
  while (<>) {
    push @input, $_;
  };
};

my $index=0;

for (@input) {
   my $n = $_ ;
   my $index = 0;

   for (@suffixes) {
     last  if $n < $units ;
     $n = $n / $units;
     $index++
   };

   printf "%.2f %s\n", $n, $suffixes[$index];
}
0
24.10.2014, 01:52
0 ответов

Теги

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