我有一些32位的Win2K3服务器运行的应用程序现在失败,然后显然是由于堆碎片。 (进程虚拟字节增长,私人字节不)我没有访问该应用程序的源代码或构build过程。

我修改了其中一台服务器上的boot.ini文件,以包含/userva=2560 ,这是正常操作模式和/3GB选项之间的一半。 通常需要数周时间才能到达失败点,但是我想马上看看这个实际上是否有效。
据我所知,这个选项限制内核到剩余的地址空间(1536MB而不是2048),但是不一定给应用程序额外的地址空间,这取决于应用程序的PE头中的标志。
如何确定O / S是否允许正在运行的特定应用程序访问2GB以上的地址空间? 此外,监视系统以确保内核不会饿死地址空间的最佳方法是什么?更一般地,我应该如何去寻找此设置的最佳值?
有两件事,首先你还需要根据KB的/3GB标志。
其次,考虑到泄漏速度这么慢,为什么要这么麻烦,你应该每个月重新启动一次,或者最多两次,以便应用安全更新。
内核内存(分页/非分页/caching) – 您可以使用Windowsdebugging器查看。 文件>内核debugging>本地选项卡。 “!vm”显示你的内核内存。 重要的值是池的使用和最大值:
NonPagedPool用法:10300(41200 Kb)
NonPagedPool最大:65281(261124 Kb)
PagedPool用法:14531(58124 Kb)
PagedPool最大值:134144(536576 Kb)
您还可以使用PE Explorer检查程序的PE镜像标题。 特征字段确定程序是否可以访问高于2 GB的内存。 如果没有设置,/ 3GB是浪费。

PE Explorer
http://www.pe-explorer.com/