3

I have a server with Windows Server Core installed and I'm trying to reach troubleshooting ability parity with resmon, which is only available in a Windows Server GUI install. I'm confident I could identify a resource bottleneck in Core, but not having access to resmon limits my ability to identify the source of the bottleneck.

Is there any powershell, cmd, or remote gui method of identifying disk resource usage by process and file? Same goes for network and identifying how much bandwidth each connection and process is using.

In Linux there are command line programs such as iftop and iotop that can present this data in an ssh terminal; something similar on Server Core would work.

Below are pictures of the information I'm interested in. It'd be great to be able to get this info from Windows Server Core in real-time or close to it.

Disk Usage Data screenshot

Network Usage Data screenshot

3

Remote perfmon is one way to go. As you cite both GUI and CLI based goals, I'm not sure which you're most intereted in. There are many WMI classes for performance counters (list with gwmi -list Win32_PerfFormattedData* |select name) that can reveal this on the CLI or for use with scripts. Here's a quick function that will show you the top consumers until you break/CTRL-C.

function topIO {
    while ($true) {
        gwmi Win32_PerfFormattedData_PerfProc_Process | select name,idprocess,IODataBytesPersec | sort -desc IODataBytesPersec | select -first 5
        start-sleep 1
        ""
    }
}

Output

name      idprocess IODataBytesPersec
----      --------- -----------------
csrss          8172                45
_Total            0                45
svchost#3      4480                 0
svchost#4      1744                 0
svchost#1      9576                 0

Resili...      5276               281
_Total            0               281
svchost#2      1792                 0
svchost#3      4480                 0
svchost        1480                 0

svchost#2      1792                 0
svchost#3      4480                 0
svchost#1      9576                 0
Squeez...      7436                 0
svchost        1480                 0
  • Thanks Craig. I tested this and it provides the IO usage per process data. Now to figure out the other three (io per file, network per process, network per connection). Here's the one-liner I used based on your syntax: while ($true) {Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | Select-Object name,idprocess,IODataBytesPersec | Sort-Object -desc IODataBytesPersec | Select-Object -first 10 | Format-Table -AutoSize; Start-Sleep 1 ; Clear-Host} – Hank Killinger Oct 25 '16 at 17:06
  • I can't say I've seen per file stuff as a perf counter before, it may be there somwhere... The others should be in one of the classes if you look around. Was just giving you a starting point if CLI was really what your were after. Consult the other classes via MSDN or with the list method descibed. You can interactively explore the properties a given class provides with gwmi theClass | select -last 1 – Clayton Oct 25 '16 at 18:31
  • CLI is definitely preferred since it could be automated if needed and it uses less resources to do remotely. I posted an answer about TCPView working from remote desktop and providing the network data I was looking for, but it's gui-only and who knows how long that will work in Server Core. I'll see if I can read and parse the same data from of WMI or get-counter. – Hank Killinger Oct 26 '16 at 14:03
0

You should be able to connect Performance Monitor remotely - link

You can put in any additional counters you wish and retrieve this information directly from your workstation.

  • Perfmon works well for detecting a disk or network usage problem. However, is there any way to use perfmon to display disk and network usage per process or per file/connection? – Hank Killinger Oct 24 '16 at 22:20
  • @HankKillinger you can attach counters to specific processes. There's also the .NET PerformanceCounter class you can utilize in PowerShell remoting or even C# link – AtomicFireball Oct 24 '16 at 23:22
0

For network usage per process and connection I found that the TCPView gui works in Windows Server Core. TCPView can be downloaded from https://technet.microsoft.com/en-us/sysinternals/bb897437

Once downloaded, copy tcpview.exe to the server using your preferred method (c$ admin share, Copy-Item cmdlet, etc). Open a remote desktop with the server and run tcpview.exe

Unfortunately tcpvcon doesn't provide usage data at the command line.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.