Best Practices for Print Server on PDC?



I've got a small network, basically three win2k servers (exchange,
terminal server, and PDC). The PDC is also the company file server,
print server, and main application server. We've got roughly 60 users
(mostly win2k clients) and 10 network printers set up on the print
server. I vaguely recall hearing once it was not a great idea to have
a print server on a PDC. I am experiencing no problems with printing
at this time, but am wondering if it is a best practice to keep print
servers (even smaller ones) off of a PDC and on a different member

In a similar vein, how much resources are being utilized during
spooling and printing functions on a print server? Are there
particular perfmon counters to watch for? We have a sometimes flakey
application on the PDC and am wondering if moving printers to another
server might improve performance.


Alan Morris [MSFT]

Since I don't own the domain around here I don't use the PDC as a print
server. I would say that the notion to not setup the PDC as a print server
stems from NT4 PDCs and poorly written kernel mode (version 2) print
drivers. Since the print drivers written for NT4 loaded in the kernel, the
opportunity to bugcheck the system greater increased. Win2k and Server 2003
(with policy adjustments) can load and use version 2 drivers, but most of
the vendors produce a version 3 (user mode print driver) for Win2k and
greater and the poorly written driver can take the spooler service down or
leak away all the memory but do not take the whole machine. Restarting the
spooler will clean up memory use. If you have any version 2 drivers on the
server and have no NT4 clients, find out if the vendor has a version 3
driver available for the device.

The resources I track on print servers are the server: sessions, and open
files; process: spoolsv.exe ,thread count, handle count,and private bytes.
Another thing to track are the GDI objects the spoolsv process uses. GDI
sets a cap at 10000 and poorly generated EMF files will leak objects during
playback in whatever process performs the playback. There is no perf
counter for this, you need to use task manager in session 0. If you TS to
the machine use mstsc /console.

Server sessions and server open files can starve a machine of non paged
memory. When the non paged memory is consumed, it's typically time to
reboot. For printing, I expect the open files to be slightly greater than
sessions. You would need to determine what this looks like for a multi-use
When I experience a radical difference in these numbers, I suspect there is
a client making too many repeated calls to the spooler. Restart the spooler
on the client. When the open files increases, the spooler handles and
threads will also increase. You should see an increase in spooler virtual
bytes as additional clients connect to the spooler service. If I have non
inbox drivers on the system, I don't worry about the increase too much
unless the memory usage is so excessive that it drastically impacts total
spooler performance. Then I go dev hunting! Other memory usage in the
spooler is from ICM (color) caching on each device. The more color printers
you have the more ICM caching occurs. I generally give the color component
5 to 8MB per printer.

You can trim down the handle count the spooler uses by deleting unused
printer ports. The spooler allocates a handle for each port at
initialization even when it is not assigned to a printer. This really does
not use much memory but I just don't like the extra handles and it the ports
are Standard TCP/IP ports (or HP Standard TCP/IP) with SNMP enabled, the
status polling mechanism is faster if ports that are not in use are not
included in the polling list.

If the GDI quota exceeds the 10000 limit, jobs will fail in GDI with error 0
(success!). I expect under 100 objects at any given time for good emf data.

I hope there are others that find this useful..

Alan Morris
Windows Printing Team
Search the Microsoft Knowledge Base here:;[ln];kbhowto

This posting is provided "AS IS" with no warranties, and confers no rights.


Wow, thanks for the detailed information. I'm going perfmon hunting
after lunch.

How do I determine what version drivers I have installed? I have no
NT4 clients and mostly HP 4000n printers.


Alan Morris [MSFT]

Printers folder
File / Server Properties / Drivers

In the Version column states "Windows NT 4.0 or 2000"

Also in
the version 2 drivers are in the 2 directory

the version 3 drivers are in the 3 directory

Alan Morris
Windows Printing Team
Search the Microsoft Knowledge Base here:;[ln];kbhowto

This posting is provided "AS IS" with no warranties, and confers no rights.

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question