PerfHound is a free server component you can use to monitor, in real-time, the performance and configuration of your Windows 2000 and Windows 2003 server(s).
PerfHound also provides many diagnostic data points, such as Windows version, service pack level, hotfixes, MDAC version, installed software, available components, processor / memory details, and disk space. For a complete list, see the descriptions under features.
Instead of relying on resource-hungry Performance Monitor counters, license-restrictive Terminal Services, and your own memory, you can access much of this data from a simple, web-based interface.
Download perfhound.zip (68.0 kb)
When downloading, please consider making a donation so that we can continue development on an upcoming upgrade of PerfHound. The next version will run as an alerting service, in addition to on-demand diagnostics polling. Stay tuned for a more complete feature list and the chance to enroll in a limited public beta.
Installation / System Requirements
Before you begin, make sure you are logged into the target server as an Administrator. Also, make sure the server is running one of the following operating systems:
- Windows 2000 Server, Service Pack 2
- Windows 2000 Advanced Server, Service Pack 2
- Windows 2003 Server
- Windows 2003 Web Server
- Windows 2003 Enterprise Server
At this time, workstation operating systems (such as Windows 2000 Professional and Windows XP) are not supported.
IIS is also required, and you must have the ability to log in to your server as an Administrator (both for installing and using PerfHound).
Extract the files from the ZIP archive into a temporary folder, and browse to this folder using Windows Explorer.
Copy the DLL file to your chosen folder for 3rd party COM objects. Go to Start, Run, and type "regsvr32 <path>\perfhound.dll" without the quotes.
Copy the ASP and CSS files to any folder on your hard drive. Create a virtual directory in IIS. To create a virtual directory, open Internet Services Manager, expand web sites, right-click Default Web Site and select "New > Virtual Directory", give it whatever alias you like, and browse to the folder where you just extracted the ASP file.
For PerfHound to retrieve all of its data correctly, this virtual directory must either (a) be accessed by an authenticated administrator, or (b) use an administrator account as the anonymous interactive user. For security reasons, we *STRONGLY* recommend you use Windows Authentication, otherwise the whole world will have a study guide for the vulnerabilities on your server(s).
If you want users to be authenticated by IIS in order to access this information, then you can follow these steps:
- in Internet Services Manager, right-click the site/virtual directory/folder
- select Properties
- on the Directory Security tab, click the Edit button under Anonymous Access
- make sure Anonymous access is unchecked, and Windows auth is checked
- you can further secure this folder to only the Administrators group (see the IIS documentation)
If you want users to be able to access this information without being prompted for an administrator username and password, then you can follow these steps:
- in Internet Services Manager, right-click the site/virtual directory/folder
- select Properties
- on the Directory Security tab, click the Edit button under Anonymous Access
- make sure Anonymous access is checked
- enter the username/password of an Administrator account
Now, browse to http://localhost/<virtual directory name>/ and you can start taking advantage of PerfHound!
Back to top
Known Issues
There are a few inconsistencies within the PerfHound interface. Most we can't really do anything about, but wanted to have them written down somewhere so you can perform a sanity check. If you find any issues not identified below, please let us know...
Data for the 'System' and 'System Idle Process' processes is missing from the Processes screen. Windows returns inconsistent and non-sensical numbers for these data points. (CPU time for 'System Idle Process' is essentially displayed in the uptime figure at the top of every screen; CPU usage for this process is (100 - sum) of all CPU usage values on the Processes screen.)
The Processes tab may show individual CPU usage figures that differ slightly from the actual Task Manager (when they differ, it's rarely by more than 1%). There are two possible reasons for this: (a) Task Manager polls every second, and PerfHound polled once, so it's possible the two calls were out of sync, even by a few milliseconds; and (b) Task Manager and PerfHound might be handling rounding in slightly different ways (and more importantly, using two different languages and data structures).
If you are running Windows 2000, the System Performance page reports 'unknown' for Physical Memory / System Cache and Commit Charge / Peak. These values aren't exposed by the operating system as documented, and are retrieved by Task Manager through an unsupported internal API call.
If you are running Windows.NET Enterprise Server (up to and including build 3621), the Windows Configuration screen will tell you that you are actually running Windows.NET Advanced Server. This is based on an internal call, which will hopefully be fixed by the time .NET Server reaches RTM.
On the Windows Configuration screen, Processor Priority and Memory Priority values may be blank on certain configurations. This seems to be a registry key permissions problem, but on one system the Processor Priority was blank until the value was changed. It continued to be populated even after it was changed back to the default. We were only able to reproduce this one time, on one machine.
The hardware configuration screen will only show one video card, even if you have multiple cards installed and enabled. Windows seems to share the properties for its video card(s) in one common place, and doesn't allow an easy way to distinguish between them.
Back to top
Features
Standard Data
At the top of every page of PerfHound's interface, there is a row of data containing CPU utilization, network utilization, free memory, and uptime since last reboot. For the most part, these numbers are based on the same data that populates Windows' Task Manager.
This data can help you analyze why performance of your server is currently sluggish... is your CPU utilization high? is some process taking all your bandwidth? are you out of RAM? has it been four years since the last reboot?
Processes
If you right-click the taskbar, and choose Task Manager, there is a tab in that interface called "Processes" ... this tab highlights the EXE name, process ID, CPU %, CPU Time, current and peak memory usage, and other data points about each and every executable currently loaded on your machine.
This data can help isolate processes or services that are consuming too much memory or using valuable CPU cycles.
The image names are sorted alphabetically, so it won't necessarily be sorted exactly as they are in Task Manager itself (unless you sort in Task Manager by image name).
System Performance
This section highlights values from the Performance tab in Task Manager. While the memory and commit values could have been formatted nicely and expressed in MB, we chose to display them exactly as they appear in Task Manager.
This data can be useful in determining the number of processes / threads currently being used, overall memory utilization, and page file usage.
ASP / IIS Performance
This page charts out three sets of data: current activity, error data, and web-related services.
Current activity outlines current sessions and current requests, as well as totals for sessions, requests, and bytes sent in and out. The totals measure the time frame since the first session started (so these figures will reset every time the server is idle).
This data can be useful in determining why processes like w3p.exe or inetinfo.exe are taking high amounts of CPU and/or RAM. If you were expecting 100 visitors and are currently servicing 250,000 sessions, your hardware plans are likely going to change.
Error data shows the number of users who let their sessions time out (which could mean they closed their browser, left it open beyond your timeout, went to another site...). Also, it shows breakdowns for actual errors in your ASP pages:
- preprocessor errors (e.g. #include file not found)
- compiler errors (e.g. missing delimiters)
- runtime errors (e.g. unterminated string constant)
- 403 errors (unauthorized access)
- 404 errors (file not found)
Runtime errors include 404 errors, so the numbers won't necessarily add up visually for the Total Failed Requests figure.
Again, this data is refreshed whenever IIS sits idle.
The Web-Related Services table shows the name and description of several common services that might be running on a web server. The status (stopped or running) is also displayed.
This information can possibly resolve questions like "why did my mail server suddenly stop sending mail" or "why can't my web server connect to SQL Server?"
Disk Space / Page File(s)
The Fixed Disks table lists each physical disk drive, breaking out each partition and displaying its drive letter, volume label, filesystem, allocated size, free space (absolute and %), and other properties -- such as whether the partition is the boot and/or primary partition. Note that this process can cause your drive(s) to "make noise" as the information is gathered.
This information is helpful in analyzing disk space -- and possibly warning you of a full disk before it happens.
In the Page File(s) table, each page file is listed, highlighting location as well as minimum and maximum size.
Windows Configuration
The Component Versions table outlines the version and/or build numbers of many of the more important Windows components, as well as a few other metrics, including:
- Windows version and build number
- Install date
- QFE/Hotfixes/Patches that have been applied
- Version of IIS
- Version of asp.dll
- Version of .NET Framework (if installed)
- Version of scripting engine
- Version of MSXML 3 and 4 (if installed)
- Version of MDAC
- Version of JET
- Version of SQL Server (if installed) as well as recommendations for SP/patches
- List of system DSNs configured
The Local Settings table highlights some of the basic configuration settings that can help to identify problems or opportunities for performance tweaks; these settings include:
- Computer name
- Domain or workgroup name
- Computer role
- Processor Priority (from System / Advanced / Performance / Advanced)
- Memory Priority (.NET Server only)
- Current and maximum registry size
- Locale and time zone
- Local and GMT time
- Date format (to troubleshoot Date() and Now() calls from ASP)
Installed Software lists out the applications that appear in the add/remove programs list. This table can help identify programs that maybe should not have been installed on your server -- and also allows you to compare servers' sets of applications.
Environment Variables simply prints out the following environment variables:
Available COM/COM+ Objects
This page shows the status of many server-side controls (either built-in or 3rd party). The first section of the table shows the ProgIDs that are installed (and, when available, the version). The second section shows the list of objects that are not installed (or could not be created). All ProgIDs also link to the vendor's web site.
This is another data point for comparing servers that are behaving differently, or determining why your ASP scripts aren't working.
Hardware Configuration
System Details shows several details about the machine, including the manufacturer / model name, number and speed of CPUs, and the level of RAM installed (as well as individual chip details).
Network Adapters shows the primary IP and Mac address for each NIC card installed on the machine.
Video Settings details the current display settings, including manufacturer / driver version, video RAM, color depth, resolution and refresh rate.
Back to top