我正在使用 Win 10 SDK 中的 poolmon 来分析内存泄漏,我在卸载驱动程序后立即运行它。我的命令行是
poolmon.exe -s -e -g -r -n poolmondump.txt
来自 poolmon/? 的参数定义
-s Display session pool
-n [Logfile] Take a pool snapshot
Logfile maybe specified, default is poolsnap.log
-g [PoolTagFile] Display driver information using PoolTagFile
If PoolTagFile is not specified
use 'pooltag.txt' from current directory
-e Display totals
-r Print memory summary information
一段输出是
Tag Type Allocs Frees Diff Bytes Per Alloc Mapped_Driver
SIFP Paged 245366784 2359304 243007480 -1 17 [MyDriver.sys]
SIFP Nonp 7 7 0 -1 -1 [MyDriver.sys]
有时会有负的Diff
Tag Type Allocs Frees Diff Bytes Per Alloc Mapped_Driver
NweN Paged 529879 4784171 -4254292 -1 1 [MyDriver.sys]
PBDN Paged 43 66 -23 1 0 [MyDriver.sys]
这个怎么理解?如何处理?
我正在尝试重命名标签,但每天都有新的东西。
这仅发生在测试设置中使用的一个虚拟机上。
最佳答案
PoolMan Windows 中存在驱动程序,它:
displays data that the operating system collects about memory allocations from the system paged and nonpaged kernel pools, and the memory pools used for Terminal Services sessions. The data is grouped by pool allocation tag.
Driver developers and testers often use PoolMon to detect memory leaks when they create a new driver, change the driver code, or stress the driver. You can also use PoolMon in each stage of testing to view the driver's patterns of allocation and free operations, and to reveal how much pool memory the driver is using at any given time.
以下是命令:
poolmon [/iTag] [/xTag] [/c [LocalTagFile]] [/g [PoolTagFile]] [/s[TSSessionID]] [ /p | /p /p ] [/e] [/( | /)] [/t | /a| /f| /d | /b| /m] [/l] [/n [File]] [/? | /h]
解释:
Parameters
/i Displays only the allocations with the specified pool tag. You can have multiple /i parameters in a PoolMon command. Do not type a space between the /i and the Tag argument.
/x Excludes allocations with the specified tag from the display. You can have multiple /x parameters in a PoolMon command. Do not type a space between the /x and the Tag argument.
Tag Specifies a pool tag or pool tag pattern. Pool tags are case-sensitive. The Tag argument can include an asterisk () to represent zero or more instances of any character, or a question mark (?*) to represent one instance of any character. Do not begin a tag with an asterisk.
/c Adds a column to the display (Mapped_Driver) listing the drivers on the local computer that use each pool tag. This feature is supported only on 32-bit versions of Windows.
LocalTagFile Specifies the path and file name of a local tag file, a formatted text file that contains a list of the drivers on the local computer, and the tag values that they assign. This file is the data source for the Mapped_Driver column that appears when you use the /c parameter. The default is localtag.txt.
If you use the /c parameter, but do not specify a value for LocalTagFile, and PoolMon does not find a localtag.txt file in the current directory, PoolMon generates a localtag.txt file by scanning the drivers on the local computer (%SystemRoot%\System32\Drivers*.sys) .
/g Adds a column to the display (Mapped_Driver) listing Windows components and commonly used drivers that assign each tag.
PoolTagFile Specifies the path and file name of a formatted text file that lists the names of Windows components and commonly used drivers and the tag values they assign. This file is the data source for the Mapped_Driver column that appears when you use the /g parameter.
The default is pooltag.txt, a file provided by Microsoft. Pooltag.txt is included in the Tools\Other subdirectory of the Windows Driver Kit (WDK).
/s Displays allocations from the Terminal Services session pools.
TSSessionID Displays only allocations from the specified session pool. Do not type a space between the /s parameter and the TSSessionID argument.
/p Displays only allocations from the nonpaged pool.
/p /p Displays only allocations from the paged pool.
/e Displays pool totals. The totals appear at the bottom of the display.
/( or /) Turns on the sort-by-change mode. With /( or /), PoolMon sorts by the change in a value (allocation, free operations, and bytes), instead of the value. The change in each value is displayed in a parentheses after the value.
Use with /a, /f, /b or /m. For example, poolmon /a sorts the display by number of allocations, while poolmon /( /a sorts the display by the change in the number of allocations.
The left parenthesis and right parenthesis characters have the same effect and can be used interchangeably.
/t Sorts alphabetically by tag name. This is the default.
/a Sorts tags by the number of allocations.
/f Sorts tags by the number of free operations.
/d Sorts tags by the difference between bytes allocations and bytes freed.
/b Sorts tags by bytes used.
/m Sorts tags by bytes-per-allocation.
/l Turns highlighting off. By default, PoolMon highlights values that have changed since the last update.
/n Saves a snapshot of the PoolMon output to a file, instead of displaying it in a command window. You can include other command-line parameters to configure the output.
Because the snapshot data is static, the columns that show the change in values in the PoolMon display do not appear in a snapshot file.
File Specifies the name and location of the snapshot file. The default is poolsnap.log.
/? or /h Displays command-line syntax. The /? and /h parameters have the same effect and can be used interchangeably.
关于windows - poolmon负数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117771/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?