Отслеживание загрузки ОЗУ процессом

Обсуждение программ nnCron и nnCron LITE

Отслеживание загрузки ОЗУ процессом

Postby Dresdon » Thu, 22 Feb 2018, 13:31

Есть процесс который со временем начинает пожирать оперативную память доводя ее до 0 и система ложиться.
Порылся на форуме и в мануале нашел только возможность отслеживания процесса на предмет загрузки ЦПУ.
Собственно в чем задача, мониторить обьем потребляемой ОЗУ процессом и в случае подьема потребления ОЗУ
выше установленной нормы (Процентной или фиксированной, желательно фиксированной) процесс будет убиваться.
Поднимет его обратно уже другой таск.
Dresdon
 
Posts: 2
Joined: Thu, 22 Feb 2018, 13:20

Re: Отслеживание загрузки ОЗУ процессом

Postby elos » Sun, 25 Feb 2018, 15:31

Пост выше - это просто констатация факта, просьба или требование?

Подсказка - AvailPhys. На практике - несмотря на выбранный интервал опроса можешь просто не успеть. Программу убъёшь, а память освободиться не успеет. Менеджеры памяти в разных Win-операционках по разному работают/
"Везение" - это результат тщательной подготовки, "невезение" - следствие разболтанности и лени. - Роберт Хайнлайн
Хорошо сформулированный вопрос отпадает сам собой.
elos
 
Posts: 671
Joined: Tue, 25 Apr 2006, 11:15

Re: Отслеживание загрузки ОЗУ процессом

Postby dothen » Sun, 25 Feb 2018, 19:20

это просто констатация факта, просьба или требование?

Это была заявка :)
Code: Select all
<%
\ http://www.nncron.ru/forums/viewtopic.php?f=5&t=10571#p26027

\ информация по процессу

\ 0x400 CONSTANT PROCESS_QUERY_INFORMATION
\ 0x10 CONSTANT PROCESS_VM_READ

WINAPI: GetProcessMemoryInfo psapi.dll

\ Берет со стека N и идентификатор процесса, оставляет на стеке размер памяти в килобайтах.
: ~proc-mem-info2 ( N PID -- n ) { atr pid -- }
    pid FALSE 0x410 OpenProcess DUP >R
    IF
      44 HERE R@ GetProcessMemoryInfo DROP
      HERE atr CELLS + @ 1024 /
      R@ CloseHandle DROP
    ELSE 0 THEN RDROP
;

\ Берет со стека N и имя исполняемого файла, оставляет на стеке размер памяти в килобайтах.
: ~proc-mem-info1 ( N adr n -- n )
    PROC-EXIST? ?DUP IF ~proc-mem-info2 ELSE DROP 0 THEN
;

\ где N
\ 1 - Page Faults Virtual memory
\ 2 - Пик по физ.памяти (PeakWorkingSetSize) в байтах
\ 3 - занимаемая физ.память в байтах
\ 4 -
\ 5 -
\ 6 -
\ 7 -
\ 8 - занимаемая вирт. память в байтах
\ 9 - Пик по виртуалке (PeakPagefileUsage) в байтах

\ Пример:
\ 3 S" notepad.exe" ~proc-mem-info1 N>S MsgBox
\ --------------------------------------------


\ http://www.nncron.ru/download/nnsrc.zip\cron\plugins\memfresh.spf

\ Функция SetProcessWorkingSetSize с аргументами (-1),
\ временно урезает рабочий комплект памяти заданного процесса до нуля.

\ #define PROCESS_SET_QUOTA   (0x0100)

\ Берет со стека идентификатор процесса.
: ProcMemFresh ( id -- )
    0 0x0100 OpenProcess DUP >R
    IF
      -1 -1 R@ SetProcessWorkingSetSize DROP
      R@ CloseHandle DROP
    THEN
    RDROP
;

\ Берет со стека имя исполняемого файла.
: ProcMemFresh2 ( a u -- )
    PROC-EXIST? ?DUP IF ProcMemFresh THEN
;

\ Пример:
\ S" notepad.exe" ProcMemFresh2
%>

#( test_proc_mem
    SingleInstance
    Time: * * * * * *
    Rule: S" notepad.exe" PROC-EXIST?
    Action:
    3 S" notepad.exe" ~proc-mem-info1 DUP . ." Kb" CR 1000 >
    IF S" notepad.exe" ProcMemFresh2 \ Если это не помогает, тогда вызываем KILL
      5000 PAUSE
      3 S" notepad.exe" ~proc-mem-info1 DUP . ." Kb" CR 1000 >
      IF S" notepad.exe" KILL ." notepad.exe Kill" CR THEN
    THEN
)#

dothen
 
Posts: 188
Joined: Mon, 16 Mar 2015, 04:58

Re: Отслеживание загрузки ОЗУ процессом

Postby Dresdon » Mon, 26 Feb 2018, 14:04

Это была просьба :)
Спасибо за помощь
Dresdon
 
Posts: 2
Joined: Thu, 22 Feb 2018, 13:20


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest

cron