Страница 1 из 1

Свопы с KDE4

Добавлено: 2010-01-09 17:48:48
Aligarh
Есть экспериментальный сервер, на котором я изучаю и экспериментирую с FreeBSD, и храню файлы.
Иксы и KDE 4,3 скомпилены из портов, все визуальные эффекты отключены, всё работает, но проблема в том, что оператива (1 Гб всего, занято после старта KDE около 300-350) после старта постепенно заполняется, и доходит до предела. При этом начинаются жуткие свопы, с трудом открывается главное меню и даже контекстное меню, программы запускаются по 20-30 секунд, т.е. как я понимаю, все непостоянно используемые страницы памяти уходят в своп, а в памяти остаётся какой-то кэш.
Проблема была на 7.2, обновил из исходников до 8.0, проблема осталась.
top пишет:

Код: Выделить всё

last pid: 36166;  load averages:  0.76,  0.55,  0.45    up 8+22:32:01  17:34:27
97 processes:  1 running, 96 sleeping
CPU:  5.6% user,  0.0% nice,  1.7% system,  0.1% interrupt, 92.6% idle
Mem: 396M Active, 284M Inact, 263M Wired, 39M Cache, 110M Buf, 304K Free
Swap: 1995M Total, 110M Used, 1886M Free, 5% Inuse
Комп всё это время стоял и качал торренты c помощью KTorrent, а также пару раз запускался браузер Konqueror.
Перезапуск иксов не помогает - память также остаётся забитой неизвестно чем.

Собственно вопрос: что можно с этим сделать? Только не говорите, что FreeBSD не для десктопа, на Linux мне уходить не хочется, он какой-то несуразный (на нетбуке у меня стоит), да и вручную все делать интереснее.

Re: Свопы с KDE4

Добавлено: 2010-01-09 18:43:26
maslivets
хм.. сдуя по Топу у вас занято только 400 Мегов оперативы, все остальное свободно, просто зарезервировано Осю, но она весь резерв отдаст на все потребности как только потребуется.

Свопа только 110 юзается.

Re: Свопы с KDE4

Добавлено: 2010-01-09 18:47:58
xelplogoog
ctrl + esc и скрин сюда )

Re: Свопы с KDE4

Добавлено: 2010-01-09 18:53:31
maslivets
Есть один скриптик написаный на перле...

Работает как аналог софтины free под линух (хотя точно не помню)

вообщем создайте фаил в /usr/local/sbin/free

Код: Выделить всё

# touch /usr/local/sbin/free
# chmod 755 /usr/local/sbin/free
# ee /usr/local/sbin/free
и вставте туда этот текст

Код: Выделить всё

#!/usr/bin/perl

my $sysctl = {};
my $sysctl_output = `/sbin/sysctl -a`;
foreach my $line (split(/\n/, $sysctl_output)) {
    if ($line =~ m/^([^:]+):\s+(.+)\s*$/s) {
        $sysctl->{$1} = $2;
    }
}

#   round the physical memory size to the next power of two which is
#   reasonable for memory cards. We do this by first determining the
#   guessed memory card size under the assumption that usual computer
#   hardware has an average of a maximally eight memory cards installed
#   and those are usually of equal size.
sub mem_rounded {
    my ($mem_size) = @_;
    my $chip_size  = 1;
    my $chip_guess = ($mem_size / 8) - 1;
    while ($chip_guess != 0) {
        $chip_guess >>= 1;
        $chip_size  <<= 1;
    }
    my $mem_round = (int($mem_size / $chip_size) + 1) * $chip_size;
    return $mem_round;
}

#   determine the individual known information
#   NOTICE: forget hw.usermem, it is just (hw.physmem - vm.stats.vm.v_wire_count).
#   NOTICE: forget vm.stats.misc.zero_page_count, it is just the subset of
#           vm.stats.vm.v_free_count which is already pre-zeroed.
my $mem_hw        = &mem_rounded($sysctl->{"hw.physmem"});
my $mem_phys      = $sysctl->{"hw.physmem"};
my $mem_all       = $sysctl->{"vm.stats.vm.v_page_count"}      * $sysctl->{"hw.pagesize"};
my $mem_wire      = $sysctl->{"vm.stats.vm.v_wire_count"}      * $sysctl->{"hw.pagesize"};
my $mem_active    = $sysctl->{"vm.stats.vm.v_active_count"}    * $sysctl->{"hw.pagesize"};
my $mem_inactive  = $sysctl->{"vm.stats.vm.v_inactive_count"}  * $sysctl->{"hw.pagesize"};
my $mem_cache     = $sysctl->{"vm.stats.vm.v_cache_count"}     * $sysctl->{"hw.pagesize"};
my $mem_free      = $sysctl->{"vm.stats.vm.v_free_count"}      * $sysctl->{"hw.pagesize"};

#   determine the individual unknown information
my $mem_gap_vm    = $mem_all - ($mem_wire + $mem_active + $mem_inactive + $mem_cache + $mem_free);
my $mem_gap_sys   = $mem_phys - $mem_all;
my $mem_gap_hw    = $mem_hw   - $mem_phys;

#   determine logical summary information
my $mem_total = $mem_hw;
my $mem_avail = $mem_inactive + $mem_cache + $mem_free;
my $mem_used  = $mem_total - $mem_avail;

#   information annotations
my $info = {
    "mem_wire"     => 'Wired: disabled for paging out',
    "mem_active"   => 'Active: recently referenced',
    "mem_inactive" => 'Inactive: recently not referenced',
    "mem_cache"    => 'Cached: almost avail. for allocation',
    "mem_free"     => 'Free: fully available for allocation',
    "mem_gap_vm"   => 'Memory gap: UNKNOWN',
    "mem_all"      => 'Total real memory managed',
    "mem_gap_sys"  => 'Memory gap: Kernel?!',
    "mem_phys"     => 'Total real memory available',
    "mem_gap_hw"   => 'Memory gap: Segment Mappings?!',
    "mem_hw"       => 'Total real memory installed',
    "mem_used"     => 'Logically used memory',
    "mem_avail"    => 'Logically available memory',
    "mem_total"    => 'Logically total memory',
};

#   print system results
printf("SYSTEM MEMORY INFORMATION:\n");
printf("mem_wire:      %12d (%7dMB) [%3d%%] %s\n", $mem_wire,     $mem_wire     / (1024*1024), ($mem_wire     / $mem_all) * 100, $info->{"mem_wire"});
printf("mem_active:  + %12d (%7dMB) [%3d%%] %s\n", $mem_active,   $mem_active   / (1024*1024), ($mem_active   / $mem_all) * 100, $info->{"mem_active"});
printf("mem_inactive:+ %12d (%7dMB) [%3d%%] %s\n", $mem_inactive, $mem_inactive / (1024*1024), ($mem_inactive / $mem_all) * 100, $info->{"mem_inactive"});
printf("mem_cache:   + %12d (%7dMB) [%3d%%] %s\n", $mem_cache,    $mem_cache    / (1024*1024), ($mem_cache    / $mem_all) * 100, $info->{"mem_cache"});
printf("mem_free:    + %12d (%7dMB) [%3d%%] %s\n", $mem_free,     $mem_free     / (1024*1024), ($mem_free     / $mem_all) * 100, $info->{"mem_free"});
printf("mem_gap_vm:  + %12d (%7dMB) [%3d%%] %s\n", $mem_gap_vm,   $mem_gap_vm   / (1024*1024), ($mem_gap_vm   / $mem_all) * 100, $info->{"mem_gap_vm"});
printf("-------------- ------------ ----------- ------\n");
printf("mem_all:     = %12d (%7dMB) [100%%] %s\n", $mem_all,      $mem_all      / (1024*1024), $info->{"mem_all"});
printf("mem_gap_sys: + %12d (%7dMB)        %s\n",  $mem_gap_sys,  $mem_gap_sys  / (1024*1024), $info->{"mem_gap_sys"});
printf("-------------- ------------ -----------\n");
printf("mem_phys:    = %12d (%7dMB)        %s\n",  $mem_phys,     $mem_phys     / (1024*1024), $info->{"mem_phys"});
printf("mem_gap_hw:  + %12d (%7dMB)        %s\n",  $mem_gap_hw,   $mem_gap_hw   / (1024*1024), $info->{"mem_gap_hw"});
printf("-------------- ------------ -----------\n");
printf("mem_hw:      = %12d (%7dMB)        %s\n",  $mem_hw,       $mem_hw       / (1024*1024), $info->{"mem_hw"});

#   print logical results
printf("\n");
printf("SYSTEM MEMORY SUMMARY:\n");
printf("mem_used:      %12d (%7dMB) [%3d%%] %s\n", $mem_used,  $mem_used  / (1024*1024), ($mem_used  / $mem_total) * 100, $info->{"mem_used"});
printf("mem_avail:   + %12d (%7dMB) [%3d%%] %s\n", $mem_avail, $mem_avail / (1024*1024), ($mem_avail / $mem_total) * 100, $info->{"mem_avail"});
printf("-------------- ------------ ----------- ------\n");
printf("mem_total:   = %12d (%7dMB) [100%%] %s\n", $mem_total, $mem_total / (1024*1024), $info->{"mem_total"});
после чего просто с консоли запускайте

Код: Выделить всё

# free
SYSTEM MEMORY INFORMATION:
mem_wire:          80302080 (     76MB) [ 15%] Wired: disabled for paging out
mem_active:  +    299741184 (    285MB) [ 58%] Active: recently referenced
mem_inactive:+    116715520 (    111MB) [ 22%] Inactive: recently not referenced
mem_cache:   +      9994240 (      9MB) [  1%] Cached: almost avail. for allocation
mem_free:    +      5746688 (      5MB) [  1%] Free: fully available for allocation
mem_gap_vm:  +       737280 (      0MB) [  0%] Memory gap: UNKNOWN
-------------- ------------ ----------- ------
mem_all:     =    513236992 (    489MB) [100%] Total real memory managed
mem_gap_sys: +      9711616 (      9MB)        Memory gap: Kernel?!
-------------- ------------ -----------
mem_phys:    =    522948608 (    498MB)        Total real memory available
mem_gap_hw:  +     13922304 (     13MB)        Memory gap: Segment Mappings?!
-------------- ------------ -----------
mem_hw:      =    536870912 (    512MB)        Total real memory installed

SYSTEM MEMORY SUMMARY:
mem_used:         404414464 (    385MB) [ 75%] Logically used memory
mem_avail:   +    132456448 (    126MB) [ 24%] Logically available memory
-------------- ------------ ----------- ------
mem_total:   =    536870912 (    512MB) [100%] Logically total memory
Так вы сможете увидеть сколько реально у вас свободно/занято памяти.

Re: Свопы с KDE4

Добавлено: 2010-01-09 19:21:43
MASiK
Удобный скриптик, швырнуть надо в "Полезные Скрипты"

Re: Свопы с KDE4

Добавлено: 2010-01-09 21:12:24
Aligarh
maslivets писал(а):хм.. сдуя по Топу у вас занято только 400 Мегов оперативы, все остальное свободно, просто зарезервировано Осю, но она весь резерв отдаст на все потребности как только потребуется.
Ну да, только проблема в том, что она выгружает из памяти работающие программы, и делает это в угоду кэшу.
xelplogoog писал(а):ctrl + esc и скрин сюда )
Изображение

Re: Свопы с KDE4

Добавлено: 2010-01-11 18:26:44
Aligarh
Извиняюсь за искусственный подъём темы, но неужели никто не знает и ни разу не делал десктоп из фри?

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

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

Re: Свопы с KDE4

Добавлено: 2010-01-11 19:52:00
Alex Keda
попробуйте

Re: Свопы с KDE4

Добавлено: 2010-01-12 0:36:37
Aligarh
Как ни странно комментирование свопа в fstab помогло! Программы стартуют шустро, а KTorrent мгновенно откликается на запросы даже после нескольких часов работы.
Память при этом также забилась кэшем.

Код: Выделить всё

last pid:  2007;  load averages:  0.12,  0.18,  0.16    up 0+03:24:27  00:32:16
89 processes:  1 running, 88 sleeping
CPU:  2.5% user,  0.0% nice,  2.9% system,  0.2% interrupt, 94.4% idle
Mem: 414M Active, 327M Inact, 190M Wired, 25M Cache, 110M Buf, 26M Free
Swap:
Только вот не знаю, как теперь будет вести себя система без свопа. Хватит ли 1 Гб для работы, или возможны вылеты?

Re: Свопы с KDE4

Добавлено: 2010-01-12 1:03:21
hizel

Код: Выделить всё

mount -a -t ufs
и редактируйте