Как мне создать командный файл, который сообщает мне количество используемой памяти? - PullRequest
0 голосов
/ 13 мая 2019

Я хотел бы создать командный файл, который даст мне память необходимого файла.Например, Chrome.exe.И отправьте мне электронное письмо, если требуемая память превышает 1 ГБ.

Приложение, которое нужно проверить, находится на сервере терминалов и требует все больше и больше памяти.Он должен перейти ко мне по электронной почте, в котором сообщается, что приложению требуется более 1 ГБ памяти.

В качестве информации пакетный файл будет запускаться на терминальном сервере.И запускается при планировании задач каждые 10 минут.

Я пробовал до сих пор.

 powershell.exe -command send-mailmessage -to test@example.de -cc test.e@example.de 
-from test@example.de -subject '"Batch-Testmail"' 
-smtpserver smtp.testserver.de -body '"Testmail"'

Это всего лишь пример.

И чтобы проверить, сколько рабочей области нужно моей программе.Хром например

dir C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

Ответы [ 4 ]

2 голосов
/ 13 мая 2019

Если вы запрашиваете объем памяти, используемый запущенным процессом, вы можете начать испытывать его, используя следующую команду:

wmic process where name='chrome.exe' get WorkingSetSize

Он выведет на экран объем использованной памятина каждой из вкладок Chrome, которые вы открыли.

Надеюсь, это поможет.:)

Я взял образец отсюда:

https://superuser.com/questions/1128692/extract-used-ram-of-program-by-batch

Используя затем предоставленные вами сведения об электронном письме, вы можете сделать что-то вроде этого:

$app_loaded=wmic process where "workingsetsize>=1000000000" get name 
$EmailFrom = “yourgmailadress@gmail.com”
$EmailTo = “destination@somedomain.com”
$Subject = “The subject of your email”
$Body = “The application”.$app_loaded." is using more memory than expected."
$SMTPServer = “smtp.gmail.com”
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“usr”, “pass”);
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

С уважением.

0 голосов
/ 15 мая 2019

Решение:

$mem = get-process | Group-Object -Property chrome.exe | 
Format-Table @{n='Mem';e={'{0:N0}' -f (($_.Group|Measure-Object WorkingSet -Sum).Sum / 1MB)};a='right'}  -HideTableHeaders -AutoSize | Out-String

if($mem.Trim()/1 -gt 1024) {
   command send-mailmessage -to example@mail.com -cc examplecc@mail.com -from noreply@mail.com -subject '"Memory Warning: 1 GB accumulated"' -smtpserver smtp.server.com -body '"this is a notification from server x"' -priority High
}
0 голосов
/ 14 мая 2019

Я также думаю, что решение PowerShell лучше.WMI хорош, мы могли бы также сделать это с Get-Process и Group-Object, например

$mem = get-process | Group-Object -Property Chrome.exe | 
    Format-Table @{n='Mem';e={'{0:N0}' -f (($_.Group|Measure-Object WorkingSet -Sum).Sum / 1MB)};a='right'}  -HideTableHeaders -AutoSize | Out-String

if($mem.Trim()/1 -gt 1024) {
    $EmailFrom = "noreply@do.too"
    $EmailTo = "you@do.too" 
    $Subject = "Memory Warning: $($mem.Trim()) MB accumulated" 
    $Body = "this is a notification from server x" 
    $SMTPServer = "smtp.gmail.com" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $credentials); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}
0 голосов
/ 13 мая 2019

Попробуйте это?

@echo off
setlocal ENABLEDELAYEDEXPANSION
set CHROME_MEM=0
for /F "tokens=5" %%a in ('tasklist ^| find "chrome"') do (set MEM=%%a
 set /A CHROME_MEM=!CHROME_MEM! + !MEM:,=!
)
echo Total Memory is %CHROME_MEM% K
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...