Blog

register and unrigister dll

25/08/2011 12:06

Back in my developer days when I was building DLLs and OCXs, I was constantly registering and unregistering DLLs using the command line (find me a dev who isn't a command line junkie - I still have two prompts open as I type this). As time's gone on, I submitted to using Windows Explorer more and more to do things and (this is going back many years), someone told me how to setup a shell extension to DLLs to allow you to register and unregister them directly. I guess I kept that file around all these years and it's useful to find it again now I'm installing test builds regularly. Hopefully, it's obvious how this works when you see the registry file below. Simply save as xyzzy.reg and merge it into the registry.

REGEDIT4
[HKEY_CLASSES_ROOT\.dll]
@="dllfile"
[HKEY_CLASSES_ROOT\dllfile\shell]
@="WIN_SYS"
[HKEY_CLASSES_ROOT\dllfile\shell\REG_32]
@="Register"
[HKEY_CLASSES_ROOT\dllfile\shell\REG_32\command]
@="regsvr32.exe %1"
[HKEY_CLASSES_ROOT\dllfile\shell\Unregister]
@=""
[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]
@="regsvr32.exe /u %1"
[HKEY_CLASSES_ROOT\.ocx]
@="dllfile"


Once you click on a DLL in Windows Explorer, you'll see two new options to Register and Unregister DLLs. Normal disclaimer applys about messing up your registry if you choose to use this etc.

VMMap - A Peek Inside Virtual Memory

16/04/2010 18:13

Today I would like to do a quick walkthrough of the VMMap tool from Windows Sysinternals.

This tool gives us a neat summary of a process’ virtual and physical memory usage. It shows a graphical summary as well as a detailed report of a given process’ memory usage pattern.

VMMap breaks down the memory usage to distinguish space used by file images loaded into the process address space, shared memory, memory used by mapped files, heap, stack, free space and more.

This is useful for one to easily understand where the process’ allocated virtual memory is being utilized.

The main window of VMMap looks like this:

Main interface

As soon as you open VMMap, you are prompted to choose the process you want to analyze.

Note: You must run this in elevated mode in Windows Vista and higher.

 Process Selection

If you want to view a previously saved report just click Cancel and open the saved report from the main window.

It also allows you to compare the two most recent snapshots and view the differences using the Show Changes option.

VMMap also has the following command line switches:

Command Line Switches

From a performance engineer’s perspective, most of the virtual memory usage questions are related to memory leak issues and are often resolved by the use of the Performance Monitor tool.

However, VMMap is useful in understanding where specifically allocated memory is utilized.

Another good use for this tool is determining the cause of virtual memory fragmentation. Memory fragmentation can cause cases where a memory allocation fails even though you have ample free space available in process’ address space.

In such cases you can look under the “Largest” column under “Free” memory type to find out the largest free block available. If your allocation is larger than the largest free block, your allocation will fail and the program may throw an “out of memory” error.

An example of this is Exchange virtual memory fragmentation, where you sometimes experience memory allocation failures even though you don’t appear to actually be out of memory.

While this tool may be more useful for developers to understand their programs memory usage patterns and tweak them better, we can have our share of VMMap too.

VMMap Download: https://technet.microsoft.com/hi-in/sysinternals/dd535533(en-us).aspx

 

Disabled performance counters and Exctrlst.exe

16/04/2010 18:06

a brief discussion of a very useful tool. You may have had the need to run a Performance Monitor log at one time or another, but noticed that a needed counter was missing from the list. This can occur if the counter has been disabled intentionally, or if the counter has been disabled by the operating system itself due to it faulting 3 times. When a counter is disabled, a simple registry value is set that tells the OS to ignore it. This value is set under the Performance key of the service in question. If the Disable Performance Counters entry is set to 1 then the counter is disabled, like so:

 

Exctrlst2

Now, you can always reenable a performance counter manually by editing the registry, but they are not always easy to find depending on the service name they are listed under. We have a tool that can come in handy in these situations, the Extensible Counter List tool, or Exctrlst.exe. This tool shows a list of all installed performance counters, sorted either by DLL name, service or Counter ID. With this, you can easily see if a counter is enabled or disabled, and set them however you wish. This utility is part of the Windows 2000 resource kit, and can also be downloaded from here:

 

https://download.microsoft.com/download/win2000platform/exctrlst/1.00.0.1/nt5/en-us/exctrlst_setup.exe

 

Once downloaded, start the installation and follow the installation wizard. The default install location for this will be:

 

C:\Program Files\Resource Kit

 

 

 

To launch the utility, just double click the executable - Exctrlst.exe.

 

NOTE: On Windows Vista and above, this must be run elevated, so right-click and select the Run As Administrator option.

 

When it opens, you should see a window very similar to this:

 

Exctrlst

 

Now look through the list for the performance counter which you are missing. For example, if the disk counters are missing, search for PerfDisk. Once you click the performance counter you are interested in, verify if the Performance Counters Enabled box is checked or not. If the box is not checked, then the performance counter is disabled. To reenable it, all you have to do is place a check mark in the box. The registry change happens immediately, so all you have to do is close the tool when you are done.

This tool can be run on any operating system version from Windows 2000 to Windows Server 2008 R2.

I would also suggest that you have a look at the below articles as well.

https://support.microsoft.com/kb/300956

https://technet.microsoft.com/en-us/library/cc784382(WS.10).aspx

That’s all for now.

Troubleshooting Event ID 333 Errors

16/04/2010 17:54

As system memory increases, and applications and roles of the server become more important, access to the disk becomes more competitive between applications and the operating system.  As a result, you can start to see the Event ID 333 logged, and you are likely seeing other performance issues including server hangs, pauses, sluggish response times and more.  So today we're going to discuss what the Event ID 333 is, possible causes and common solutions for both 32-bit and 64-bit systems.

The first thing to understand is what exactly an Event ID 333 is.  The event ID 333 is a System event error log that occurs when the registry is unable to complete a flush operation to the disk.  There are several reasons that this can fail and we'll discuss them below.  So, what does the Event ID 333 look like?  In the system event log, you see at least one, and more likely multiple instances of the following:

Event ID 333

Event ID 333’s are new to Windows Server 2003 Service Pack 1 and are written to the system event log if the Operating System is not able to flush out or write to the registry hive.  The symptoms that accompany an Event ID 333 can vary between server hangs, “Insufficient resources exist to complete the requested service” errors, SQL Databases stopping and starting, database queries are slow and sluggish operating system performance.  The apparent slow server performance is why the Performance team is engaged on the majority of the issues.  As mentioned previously, the Event ID 333 can occur on both x86 and x64 systems.

Now that we have a little background on what the Event ID 333 is and why it exists, we’re going to take a look at the causes. There are a number of different reasons for why a server is logging the Event ID 333's - the majority of the issues are caused by one of the following:

  • The disk hosting the system partition is not keeping up with the load (high disk queue lengths).  This can be determined using a Performance Monitor capture.  This can occur on both x64 and x86 systems.
  • There is memory pressure.  In many cases there will also be issues with low Paged (Event 2020) or NonPaged (Event 2019) pool memory or low System PTE's.  Using Performance Monitor can help to determine if you are low on System PTE's.  This is more likely to occur on x86 systems dues to the memory limitations of the 32-bit address space
  • A filter driver is keeping the registry from being flushed.  This can occur on both x64 and x86 systems
  • A User account granted the “Lock system pages in memory” user right.  This can occur on both x64 and x86 systems

So - how do we go about resolving the Event ID 333 problem?  Depending on the particular scenario that is causing your issue, then you should perform one of the following:

Disk issues:

  1. Enable Enhanced Performance Options for the physical disks that host the Operating System itself
  2. Update your disk controller firmware and drivers.  Engage your hardware vendor to ensure that you are running the latest supported version and also to verify if there are any known issues.
  3. Determine what process is taxing the disk by using Performance Monitor logging.  Examine the Process Object and review each processes I/O Data bytes/sec.  If a process exhibits an unusual amount of I/O compared to your server's baseline performance, then investigate that process.  For non-Microsoft processes, contact the software vendor.

Maximize Kernel Memory and System PTE's:

  1. If you are using the /3GB switch on a 32-bit system, do you really need it?  As we discussed in our post on /3GB this switch may not be necessary. 
    • Some software vendors recommend implementing the switch for their applications - verify with them that they have the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in their image header.  If they do not, then the application is only able to use the standard 2GB of user-mode memory - but the kernel is now limited to 1GB for no reason. 
    • You can also check the virtual memory of the executable that is believed to take advantage of /3GB.  If the process is not exceeding 1.8GB of Virtual Memory then it is unlikely to be able to take advantage of the extra virtual memory.
    • If the /3GB switch is required (for example Exchange Servers that are configured as Mailbox Servers) then add the /USERVA=2970 switch to give a portion of the User-mode memory to the Kernel to help guard against PTE Depletion.  Microsoft KB Article 316739 discusses the use of the /USERVA switch.
  2. Adjust the allocation and use of PagedPool memory by making some registry changes that are outlined in Microsoft KB Article 312362.
  3. Disable the Hot Add Memory feature to re-allocate reserved Paged Pool memory back to the Operating System.  When the Hot Add Memory feature is enabled, the operating system pre-allocates kernel resources to handle any future memory that may be added to the computer.  Kernel resources are allocated based on the capabilities of the computer instead of on the RAM that is actually installed.  The kernel may allocate significant resources to RAM that may never be installed.  Therefore, the Hot Add Memory feature may cause the maximum size of the paged pool to be much smaller than expected.

A filter driver is preventing the registry from being flushed:

A quick note on filter drivers - removing or disabling filter drivers without understanding the impact to the system can result in unexpected system behaviors including system hangs or bugchecks.  Examples of common programs that use filter and kernel drivers include Anti-virus software, Backup Software (including Microsoft Volume Shadow Copy) and Version-2 printer drivers.  For information on how to temporarily disable filter drivers, refer to Microsoft KB Article 816071.  Before disabling the filter drivers however, check to see if some of the 3rd party drivers are simply outdated.  The easiest way to check on these 3rd party filter drivers is to use our MPS Reporting utility to capture this information.

  1. Download the MPSRPT_SETUPPerf.exe file from the Microsoft Product Support Reporting Tools page to the local machine.
  2. Run the MPS Reports executable
  3. Once the report has finished, you can extract the PStat.txt file from the .CAB file that is created and review the list of 3rd party filter / kernel drivers to see which ones may be outdated.  Contact the vendor for the filter driver to get the latest supported version and also to discuss any potential issues with the driver.

"Lock Pages in Memory" user right:

On x64 systems, the likelihood of a server running out of kernel memory or System PTE's is far less than on an x86 system.  However, we have seen the Event 333 error occur on x64 systems as well.  Using the "!vm" debugger command when reviewing a memory dump of the server may indicate that the server is low on physical memory, even though performance monitor data indicates that there is plenty of available memory.  The sample output below illustrates this:

15: kd> !vm
*** Virtual Memory Usage ***
Physical Memory: 2095394 ( 8381576 Kb)
Page File: \??\C:\pagefile.sys
Current: 4249600 Kb Free Space: 4154172 Kb
Minimum: 4249600 Kb Maximum: 4249600 Kb
Available Pages: 868200 ( 3472800 Kb)
ResAvail Pages: 250 ( 1000 Kb)

********** Running out of physical memory **********

To work around this behavior on x64 platforms or on servers with 4GB or less of physical RAM use the following steps:

  1. Click on Start --> Run
  2. Type Secpol.msc and click OK
  3. Expand "Local Policies" then click on "User Rights Assignment"
  4. Double click on "Lock pages in memory"
  5. Highlight any user accounts listed and click on "Remove"
  6. Click OK after all accounts have been removed
  7. Reboot the system

NOTE: By default, the Windows Operating system does not grant this user right to any accounts.  The “Lock pages in memory” right is granted to the account used for SQL Services by the SQL 2005 RTM/SP1 Enterprise Edition install on 32bit systems.  If you are using SQL Enterprise on 32-bit servers with more than 4GB of RAM, the Lock Pages in Memory right is needed.  To help reduce the occurrence of the Event ID 333's on these systems, ensure the user account you are using for the SQL services is only used for SQL. Check the access right for “Lock pages in memory” and only list the account used for SQL.  If System, or any other accounts are listed, remove them.  For x64 systems, remove all accounts listed.

Well that does it for this post. 

Memory Management - Demystifying /3GB

16/04/2010 17:49

 

 

As promised - here's the long awaited post on the infamous /3GB switch.  At least once a week we have this discussion with a Systems Administrator somewhere who has this set in the boot.ini file on all of the servers but doesn't know why.  Maybe someone added it to the server build process at some point or perhaps someone read about the /3GB switch somewhere and thought that it would improve performance or enable them to see the full 4GB or 8GB of physical memory installed on the system.  So let's start by dispelling a few /3GB myths:

  • /3GB won't enable you to see the additional 4GB or 8GB of RAM you added to your new server
  • /3GB doesn't necessarily make your application 50% more efficient
  • /3GB should not be a standard for your environment (there are exceptions, and we'll get to those)

 OK - so what does the /3GB switch really do?  If you recall, from the Memory Management 101 post, Windows 32-bit Operating Systems implement a virtual memory system based on a flat 32-bit address space.  This address space translates into 4GB of virtual memory - no more, and no less.  By default, the address space is divided into two equal chunks.  2GB for the Kernel and 2GB for User-mode processes.  The Kernel space is common for all applications and the User-mode processes each get their own 2GB address space to work with.

So where does the /3GB switch come in?  Windows 2000 Advanced Server, Windows 2000 Datacenter Server, Windows XP SP2 and later and all versions of Windows Server 2003 support the /3GB boot-time option to allow the user mode address space to grow to 3GB.  The /3GB option was intended as a short term solution to allow applications such as database servers to maintain more data in memory than a 2GB address space allowed.  However, using the /3GB method to increase the user-mode memory space comes at a cost. 

Remember that we only have a 4GB total address space to work with.  If we have to allocate an additional 1GB of this address space to the user-mode space, then the System space is cut in half.  Drivers, Heap, Paged & NonPaged Memory all have only half the resources to work with now.  However, because of the way memory mapping works, cutting the kernel space in half does a lot more than just reducing the address space.  Many of the structures within the kernel virtual memory space are cut back by far more than 50%.  For example, we took a Windows Server 2003 Enterprise R2 machine with 1GB of RAM installed and compared some values with and without the /3GB switch enabled.

 

Default OS Build:
Free System PTE's 251,980 (1,007,920 kb)
NonPaged Pool Max 206,848 kb

 

 

With /3GB enabled:
Free System PTE's 34,884 (139,536 kb)
NonPaged Pool Max 129,312 kb

 

As you can see, the Free System PTE's drops by over 200,000.  Keep in mind that this is only a test server that isn't under any sort of load.  A machine under medium to heavy load could quite easily run out of free PTE's - meaning that the system can no longer map system pages such as I/O space, kernel stacks and memory descriptor lists.  In addition, look at NonPaged Pool after the /3GB parameter is enabled.  The NonPaged Pool maximum is only 130MB.  Drivers use the NonPaged Pool for many of their requirements because they can be accessed at any IRQL.  Once we run into NonPaged pool depletion, we're looking at our old friend, the Event ID 2019.

OK - so let's quickly recap what we've discussed so far.  The /3GB switch is not related to the amount of physical memory installed in a system.  It is useful if you have an application that can take advantage of a larger address space.  For a process to access the full 3GB address space, the image file must have the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in the image header.

If the flag is not set in the image header, then the OS reserves the third gigabyte so that the application won't see virtual addresses greater than 0x7FFFFFFF. You set this flag by specifying the linker flag /LARGEADDRESSAWARE when building the executable.  This flag has no effect when running the application on a system with a 2-GB user address space. Therefore if you enable the /3GB switch, then applications that do not have this flag set can only use the standard 2GB of User mode memory, and the Kernel is still limited to the 1GB space - which means that 1GB of virtual memory is basically wasted!

Earlier, we mentioned that there were some applications that benefit from the use of the /3GB switch.  The predominant scenario where the /3GB switch is not only recommended, but actually required is with Microsoft Exchange servers that house public folders and / or mailboxes.  Due to the way that Exchange handles memory management, the additional 1GB of user mode memory is required to ensure that the Store.exe process does not run out of virtual address space.  However, in order to guard against System PTE depletion, the system can be tuned using the /USERVA switch in conjunction with the /3GB switch.  This tunes the actual amount of memory for the Address space.  For example, setting USERVA=3030 means that the process space is actually only 3,030MB and not 3,072MB (which would be the process space with only the /3GB switch present).  The additional 42MB is used for System PTE usage.  The USERVA value can safely be tweaked as low as 2800 - however, if it is necessary to set USERVA this low, then you probably want to start thinking about scaling your Exchange environment to spread the load! 

Ideally, there should always be at least 24,000 Free System PTE's at boot time.  Depending on server workload there may be wide variances in the amount of Free System PTE's during the course of a normal duty cycle, so it may be necessary to implement some long-term monitoring to ensure that the server does not fall below 10,000 Free PTE's. 

So there you have it - the /3GB switch demystified.  Hopefully this post, as well as the others in our Memory Management series will help you understand a bit more about how and why the Operating System behaves the way it does.  Remember that the /3GB switch is intended to be used in very specific instances - and now you know why!

Memory Management 101

16/04/2010 17:46

 

Memory Management issues make up a considerable portion of the support incidents that we handle.  At some point during the support incident we invariably engage in a discussion of Memory Management, Memory Tuning, the use of the infamous /3GB switch and more.  There's far too much information to compress into a single blog post, so think of this as the first part in a series.  In this post we'll cover the basics of 32-bit Memory architecture and the difference between Kernel and User mode memory.  So let's dive right in ...

Windows 32-bit Operating Systems implement a virtual memory system based on a flat 32-bit address space.  32-bits of address space translates into 4GB of virtual memory.  A process can access up to 4GB of memory address space (using the /3GB switch changes this behavior - and we'll cover that in a later post).

You can't have a discussion of Memory Management basics, without distinguishing between Kernel-mode and User-mode memory.  The system space (aka Kernel space) is the portion of the address space in which the OS and kernel-mode drivers reside.  Only kernel-mode code can access this space.  User-mode threads can access data only in the context of their own process.  User-mode threads cannot access data within another processes space directly, nor can it access the system address space directly.  Kernel-mode drivers are trusted by the OS and can access both kernel and user space.  When a driver routine is called from a user thread, the thread's data remains in the user-mode space.  However, the kernel-mode driver can access the user-mode data for the thread and access the kernel-mode space.

OK - so looking at the diagram above, we can see how the 4GB memory address space is divided.  Windows allocates the lower half of the 4GB address space (from 0x00000000 to 0x7FFFFFFF) to processes for their own unique private storage, and reserves the other half (from 0x80000000 to 0xFFFFFFFF) for the Operating System's use.  Virtual memory provides a view of memory that does not necessarily correspond to the physical layout of memory.

This is usually the point in the discussion where the majority of folks start getting confused and their eyes start to glaze over.  In simplistic terms, the memory manager translates the virtual memory addresses into physical addresses where the data is stored.  Every page in virtual memory is listed in a page table which in turn identifies the correct physical page.  The system and CPU use the information from the virtual address to find the correct page table entry for a specific page. 

So, looking at the diagram on the left, we can see that a virtual address points to a specific location on a virtual page.  The virtual address contains a byte offset and several index values that are used to locate the page table entry that maps the virtual page into physical memory.  After the memory manager finds the page table entry, it uses the offset to find a byte in physical memory - identified by a physical address.

 

Memory Management - Understanding Pool Resources

16/04/2010 17:33

First of all - what are Pool Resources?  When a machine boots up, the Memory Manager creates two dynamically sized memory pools that kernel-mode components use to allocate system memory. These two pools are known as the Paged Pool and NonPaged Pool.  Each of these pools start at an initial size that is based upon the amount of physical memory present in the system.  Pool memory is a subset of available memory and is not necessarily contiguous.  If necessary, these pools can grow up to a maximum size that is determined by the system at boot time.

So - what distinguishes Paged Pool and NonPaged Pool memory?  The first difference is that Paged Pool is exactly what its name implies - it can be paged out.  The NonPaged Pool cannot be paged out.  Drivers use the NonPaged Pool for many of their requirements because they can be accessed at any Interrupt Request Level (IRQL).  The IRQL defines the hardware priority at which a processor operates at any given time (there's a link to a document covering Scheduling, Thread Context and IRQL's in the Additional Resources section at the end of this post).

Getting back to our Pool Resources, it is important to remember that these resources are finite.  The table below outlines some sample maximum values for Paged / NonPaged Pool on x86 systems that are not configured with the /3GB switch in the system's boot.ini file.  We'll cover /3GB and its effects on memory in a future post.  We'll also cover Kernel Changes to Windows Vista separately.  It's important to note that x64 systems don't suffer from the same Virtual Address Space limitations! 

Windows 2000

 

System RAM NonPaged Max Paged Max Paged Max (TS)
512 MB 131 MB 264 MB 160 MB *
1024 MB 212 MB 268 MB 160 MB *
1536 MB 256 MB 340 MB 160 MB *
2048 MB 256 MB 340 MB 160 MB *

 

 * If Terminal Services is installed on Windows 2000, Paged Pool is lowered down to 160 MB unless a registry change is made to the server to set the Paged Pool Size to its maximum value (see below).

Windows 2003 SP1

 

System RAM NonPaged Max Paged Max
512 MB 125 MB 184 MB
1024 MB 202 MB 168 MB
1536 MB 254 MB 352 MB
2048 MB 252 MB 352 MB

 

On Windows 2003 systems, Terminal Services are enabled by default. 

On both Windows 2000 and Windows 2003, the HKLM\System\CurrentControlSet\Control\Session Management\Memory Management\PagedPoolSize value can be set to 0xFFFFFFFF (or resetting the value to 0) to ensure that the Virtual Address Space used for Paged Pool is maximized.

Also - here's the theoretical maximums for pre-Vista Operating Systems:

Region IA-64 x64 x86
Process Address Space 7152 GB 8192 GB 2 to 3 GB*
Paged Pool 128 GB 128 GB 470 to 650 MB
NonPaged Pool 128 GB 128 GB 256 MB

 

 * depends on whether or not /3GB is enabled

Now that we know what the maximum value ranges should look like, here's how to verify what those values look like on your own system using Process Explorer:

  1. Download Process Explorer from the Microsoft Sysinternals Site.
  2. Unzip the contents of the Zip file to C:\ProcessExplorer
  3. Run ProcExp.exe
  4. The first thing you'll want to do is configure the Symbols and the dbghelp.dll path.  If you leave the default path alone (see the image below), you'll get an error message that you haven't configured symbols - even if you have the Symbol path filled in (the Procexp.chm file in the ProcessExplorer folder provides instructions).
  5. To get the most out of Process Explorer however, you'll need to install the Microsoft Debugging Tools (we'll be needing these later anyway when we start getting into troubleshooting).  This is important because you can specify the proper version of dbghelp.dll.  Once you have Process Explorer fully configured (see the image below) for the settings, you're ready to check out your Pool Resources:
  6. Within Process Explorer, select View ... System Information ... and look at the Kernel Memory Section.  The Paged Limit and NonPaged Limit show the current maximum values for the system you are examining.

Now, let's examine what type of items reside in each of these pools.  Within the NonPaged pool, you would find handles that are used by applications in the user-mode space as well as Kernel-Mode drivers (typically ending in a .sys file extension).  Examples of Paged Pool items are Token Objects, Kernel-Mode drivers and the Registry.

Here's where things get really interesting - what happens to a system when these Pool Resources get depleted?  Some of the most common symptoms exhibited are:

  • the machine becomes sluggish
  • users can no longer log on to the machine
  • console access is sluggish
  • users cannot connect to file shares or other shared resources
  • system hangs including the console itself being unresponsive

Symptoms such as this are usually the first indication that there is something causing an issue with the machine. 

If the NonPaged Pool on a server has become depleted, the machine will log an Event in the System Log as shown below:

Event ID 2019
Event Type: Error
Event Source: Srv
Event Category: None
Event ID: 2019
Description: The server was unable to allocate from the system NonPaged pool because the pool was empty.

Paged Pool Depletion is logged as an Event 2020:

Event ID 2020
Event Type: Error
Event Source: Srv
Event Category: None
Event ID: 2020
Description: The server was unable to allocate from the system paged pool because the pool was empty.

What are these error messages telling us beyond the fact that there is an issue with Pool Depletion?  A common misunderstanding of this message is that the problem is being caused by the Server Service (srv.sys).  Usually the Server Service is the first component to experience the issue because it is trying to satisfy a request and cannot allocate the appropriate Pool Memory

One or multiple servers may become unresponsive or start failing in any of their installed roles

14/04/2010 20:29

Our new blog has been launched today.

 

 

 

Hi all. Today I would like to bring to your attention an issue we have been seeing lately that very well may effect those of you in a corporate environment. McAfee has recently released information about this issue on their web site.

The issue is that one or multiple servers may become unresponsive or start failing in any of their installed roles. Some of the possible symptoms are:

 

· Slow file access
· Slow read/writes from an application
· Server unresponsive/hangs
· Slow SQL Server performance
· IIS Hangs
· Inability to connect remotely via RDP 
 

Further investigation may reveal that any number of processes are running high CPU or memory, or all combined are depleting the system of resources. It may not be evident what is causing the issue; just that many processes combined are most likely involved.

This can occur if McAfee Access Protection and Buffer Overflow Protection are installed. There is a known issue where severe performance degradation may occur during the scanning or monitoring of the following processes:

iexplore.exe
msimn.exe
svchost.exe 
explorer.exe 
mapisp32.exe 
ftp.exe
services.exe 
frameworkservice.exe 
lsass.exe 
inetinfo.exe 
outlook.exe 
wmplayer.exe 
mplayer2.exe 
rpcss.exe 
msmsgs.exe 
winword.exe 
excel.exe 
mstask.exe 
powerpnt.exe 
msaccess.exe 
visio32.exe 
wuauclt.exe 
sqlservr.exe 
dllhost.exe 
VSEBOTest.exe 
w3wp.exe 
EventParser.exe 
NaiMServ.exe 
SrvMon.exe
naPrdMgr.exe

Disabling the services does not actually remove the drivers, so you may see the issue even if you turn off the suspect functionality. The two drivers involved are:

a. MFEAPFK.SYS McAfee, Inc. Access Protection Filter Driver

b. MFEBOPK.SYS McAfee, Inc. Buffer Overflow Protection Driver

Due to the overhead placed on some applications by McAfee Access Protection and Buffer Overflow Protection, McAfee recommends disabling and removing  these to resolve performance issues. This hotfix will remove the filter drivers and disable the associated services.

For more info, please see the following articles on McAfee’s web site:

List of Processes Protected by Buffer Overflow Protection

https://kc.mcafee.com/corporate/index?page=content&id=KB58007

Access Protection and Buffer Overflow Protection drivers remain loaded when disabled

https://kc.mcafee.com/corporate/index?page=content&id=KB65820

VirusScan Enterprise and Buffer Overflow Protection (Master Article)

https://kc.mcafee.com/corporate/index?page=content&id=KB67733

 

 

 RSS feed.