Как контролировать рабочий набор процесса Windows, больше, чем 4 ГБ?

Сначала необходимо ли понять, где botellneck? Проблема прикладного уровня? Доступ уровня Data? Какова Ваша схема доступа? Главным образом чтения? Или возможно главным образом записи?

Для прикладного уровня:

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

Для слоя данных существуют некоторые пути, за которыми можно следовать:

  • Думать о своей рабочей нагрузке? Вы могли уменьшить некоторые запросы? Вы могли изменить свою схему? Возможно, добавляя некоторую денормализацию (предвычислительная статистика, агрегировав данные). Для очень больших таблиц Вы, вероятно, могли добавить вертикальное разделение
  • Для чтения, масштабирующего Вас, мог использовать репликацию, как Ryan B. Lynch
  • Кэширование с memcached или чем-то подобным. Но помните: "В Информатике существует только две твердых вещи: аннулирование кэша и вещи именования".
  • Я не делаю reccomend sharding (горизонтальное разделение), потому что руководящая база данных черепка является болезненной. Вот хорошая статья о sharding.
  • Разделите свои данные на различные бэкенды данных. Вот хорошая статья, описывающая идею.

3
задан 23 May 2017 в 15:41
2 ответа

Это для мониторинга определенного процесса:

"\Process(<process name>)\Working Set" | get-counter -computer <computer>

Вывод в байтах, но вы можете преобразовать его в ГБ с помощью следующей команды:

"\Process(<process name>)\Working Set" | get-counter -computer <computer>
| ForEach {$_.CounterSamples} | ForEach {[math]::round($_.cookedvalue/1GB,2)}

Изменить: Читая сообщение SO, я вижу, что вы пытаетесь просто получить любые процессы размером более 4 ГБ, не передавая конкретный процесс скрипту. Ниже приведен сценарий, который сделает это, а вот ссылка на статью в блоге Scripting Guy , в которой объясняется, как использовать командлет Get-Counter :

"\Process(*)\Working Set" | Get-Counter -computer <computer>
| ForEach {$_.CounterSamples} | ? {$_.cookedvalue -gt 4294967296} | ft -AutoSize
2
ответ дан 3 December 2019 в 06:13
-

Я знаю, что это старый вопрос, но все еще жив, показывает реальное использование 64-битной памяти в powershell:

get-process $Processname -computername $Computername | ft Name,ID,VirtualMemorySize64,PeakVirtualMemorySize64,WorkSet64,PeakWorkingSet64

и показывает использование памяти поверх gps |where {$_.workingset64 -gt 4000Mb }|ft name,pm,workingset64,id

2
ответ дан 3 December 2019 в 06:13

Теги

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