
Introduction
wxLeakyBin allows you to view memory usage and zoom in to see memory usage changes in fine detail.
The ability to view system or individual process memory usage at a magnified scale factor, including the option to view commit charge, is useful to detect even small memory leaks that are too small to show up on the regular Task Manager.
You can measure memory changes as differences between levels using markers on the graph, and assess rates of change of memory usage by reading off the slope of a linear regression line fitted to a configurable number of the most recent samples.
Update speeds can be set between 1s and 100ms, and the 200ms and 100ms update rates are faster than the fastest available in regular Task Manager (500ms).
Grid spacings are clearly shown so that you can estimate the range and timing of levels on the graph.
wxLeakyBin is freeware.
Contents
Installation
wxLeakyBin is supported on Windows operating systems Windows 7 or Windows Server 2008 R2 and later versions, and has been tested on Windows 7, Windows Server 2008 R2, and Windows 10.
wxLeakyBin is normally installed by running the installer "Install_wxLeakyBin101_32_All.exe", which may be packaged inside a zip file for distribution, i.e. "Install_wxLeakyBin101_32_All.zip". The 64 bit version is installed by "Install_wxLeakyBin101_64_All.exe", packaged as "Install_wxLeakyBin101_64_All.zip"
The 32 bit version will run on 32 bit and 64 bit Windows. The 64 bit version will run only on 64 bit Windows.
Run the installer normally (do not start it by running "as administrator"). Windows will display a User Account Control dialog to ask if you want to allow the program to make changes on your computer. You will need to allow this to get installation rights.
Assuming you click "Yes" to that, then the installer will show a Welcome page which recommends that you close all other applications, although this is not normally essential.
Clicking Next takes you to the Install Location page, where you can modify the default installation location if required, although this should not normally be necessary.
Clicking Next takes you to the Start menu options page, where you can choose to add a Start menu shortcut or not - the selection is made by a checkbox, which is checked by default.
Clicking Install then starts the installation process. At the end of the installation log displayed on this page, you should see "Completed".
When installation is complete, clicking Next displays a page that is titled "Completing wxLeakyBin Setup". This includes a checkbox to run wxLeakyBin, which you can check if you want to run wxLeakyBin immediately. You can then click Finish to close the installer. If you don't run wxLeakyBin from the installer, you can start it from the Start Menu.
Uninstallation
Close the app first if it is running (click the system close [X] icon, select from the menu File/Quit, or type Alt-F4 when the app has focus).
It's recommended that you uninstall any previous installation before upgrading to a new version. If you are changing from a 32 bit to a 64 bit version, or vice-versa, the other version should be uninstalled.
To uninstall a previous version, open Programs and Features by clicking the Start button, clicking Control Panel, clicking Programs, and then clicking Programs and Features. Find wxLeakyBin in the list, right click the entry (In Windows 10, left click the entry) and then click Uninstall.
Alternatively in Windows 10, open the Start menu, click Settings, click System, select Apps & features, find wxLeakyBin in the list, left click the entry and then click Uninstall.
You can also type 'add' into the Start menu search box and select 'Add or remove programs', then uninstall wxLeakyBin from the list as above.
Running
After you have installed the application it should be available through the normal APIs, e.g. Start menu and desktop shortcut.
The application displays a memory usage graph and a number of controls - for more information continue to the "Instructions for Use" section.
Instructions for Use
wxLeakyBin starts with default settings, showing the system memory usage scrolling to the left on a central graph as data points are added. The graph header identifies the data source in use: "Usage" or "Commit" refer to the system memory usage and commit charge values respectively.
Right-Hand Control Panel
wxLeakyBin starts with the memory display axis set to show all memory, which defines a scale factor of 1. The "+" button allows you to zoom in to show smaller ranges of memory; this can be repeated down to a very small grid scale of the order of KB. The "-" button zooms out the display and can be repeated until the scale factor of 1 is reached again. The "Centre" button adjusts the axis so that the current memory value is in the centre of the vertical axis. The "Zero" button places zero memory at the bottom of the axis, which is mainly useful for low scale factors. The "Markers off" button turns off the display of memory markers, if you enabled them.
By default, if the memory value goes off-screen, the axis will be adjusted to bring it back to the centre at the same scale factor. If you uncheck the "Keep in view" checkbox, this will no longer happen.
The Trend lines radio buttons allow you to select between "None", "Lin. Regression" (Simple Linear Regression), and "Moving Average" (Simple Moving Average) trend lines. Only one (or none) of the trend lines as selected can be displayed. The linear regression line is a straight line that is fitted to the most recent set of memory value samples, of a number set in the "Regression Samples" control, if there are sufficient samples. It is calculated as the best-fit line that minimizes the sum of the squared errors of prediction. The Simple Moving Average is the unweighted mean of the previous set of N data points using the number set in the "Regression Samples" control for the number N.
Left-Hand Control Panel
Physical Memory / Total is the total amount of physical RAM that is usable by the operating system.
Physical Memory / Available is the amount of physical memory available for use by the operating system, drivers and processes, and is equal to the sum of the standby pages, free pages and zeroed page lists.
Physical Memory / Usage is the sum of the private working sets for all processes and is the difference between total memory and available memory.
Kernel Memory / Paged is the total paged memory pool in use (virtual memory that can be stored to the paging file).
Kernel Memory / Nonpaged is the total allocated nonpaged memory pool, which is always kept present in physical memory. Memory leaks can be especially serious if they affect this type of memory.
System / Handles are Windows internal logical references to objects such as files, windows, icons and brushes.
System / Threads comprise program code that can be executed as an independent unit with access to process memory.
System / Processes are data structures that contain a program or application and all of its threads.
System / Commit refers to the Commit Charge (also called commit size), which is the total amount of virtual memory that a program has touched (committed) in the current session, including memory that has been paged out of physical memory to the disk-backed page file. For the system values, this is the sum of the commit charge for all processes and the kernel.
Memory Statistics / Change shows the rate of change obtained from the linear regression line, and is not displayed if the linear regression line is not selected.
Memory Statistics / SMA shows the latest value of the Simple Moving Average calculation. This value remains available if the SMA is not shown.
Bottom Control Panel
The buttons underneath the chart enable you to change the sample rate (timebase) as shown on the button, from left to right: 100 ms, 200 ms, 500 ms, and 1 second. These buttons are shown with an icon drawn with the colours used to identify the timebase on the chart. Note that if you change the sample rate, the graph's horizontal axis becomes non-linear, i.e. the sample points are always spaced by the same number of pixels. To enable you to identify regions on the graph where you changed the timebase, the memory value trace and vertical grid lines are drawn in a different colour for each timebase value, and the vertical grid lines also have a different style (dotted, dot-dash, dash and continuous).
The "Hor. Grid" box shows the time period represented by the horizontal spacing between vertical grid lines at the current sample rate.
The Pixels/Point control enables the graph to be shown at magnified scale, if required to assist in legibility.
Top Control Panel
The controls above the graph enable you to select a source for the graph. Click on the appropriate radio button to select system usage or commit charge. Click the button labelled "Process..." to open a dialog to select a process to monitor. Left click on the row containing the process to be monitored. Within this dialog you can select to monitor either the commit or working set size for the process. Commit Charge is the total amount of memory that the memory manager has committed for a running process. The working set of a process is the set of memory pages currently visible to the process in physical RAM memory and available to use without triggering a page fault. The working set includes both private data, and shared data which includes pages in .dll files. After closing the dialog by clicking on OK, the graph header will show the process memory type and image name. If the process ends, the header title changes to "Process not valid".
The processes listed depend on your session's access rights. If the process you want to monitor is not listed, try running wxLeakyBin "as Administrator".
Markers
wxLeakyBin has memory value markers that you can use to measure changes in memory usage. To place a marker, left click on the graph area with the mouse. Repeat to place a second (higher) marker. You can click and drag the nearest marker to the desired memory value, and see the difference between markers on the status bar. While dragging, the cursor position is given on the status bar as pixel coordinates, time relative to the latest point, and memory value. When zooming in, if the marker goes off screen, click and drag near the top or bottom to bring it back on screen, or click the "Markers off" button and start again.
Leak Testing
This screenshot show wxLeakyBin displaying the commit memory of an app that is allocating memory at a steady rate of approximately 64 kB per second. If this behaviour was seen in an app that was not expected to allocate memory in this way normally, it would indicate failure to properly free memory that was being allocated periodically.
Leak Testing Tips
A memory leak is manifested over time when an application allocates memory for some task, but does not free it after completing the task for which the memory was needed. Every time such a task is repeated, another block of memory is left allocated but unused so over a period of time, the application's use of memory grows unnecessarily until the application is closed. In particularly bad cases, a large memory leak or a small one that accumulates over a long time can adversely reduce the amount of memory available to other applications, or lead to unnecessary use of the paging file, slowing system performance, and ultimately cause "Out of Virtual Memory" errors.
wxLeakyBin's ability to follow relatively small changes in memory usage, especially in individual processes and commit charge, allow memory leaks to be quickly identified. Depending on the frequency of occurrence of leaks and their magnitude for individual processes it may still be advisable to observe memory usage over longer periods of time to distinguish between permanent leaks and memory that has been allocated for some lengthy task but is eventually released. Normal usage will tend to increase and decrease during processing but average out to a steady level, whereas a memory leak will establish a rising trend over time. Even small leaks are indicative of sloppy programming and fixing them should result in more reliable code. To make more efficient use of time, you can carry out initial checks quickly with a short observation, fixing anything that comes to light, and later carry out a final test extended over a longer period.
A process that creates temporary threads but does not end them properly, as well as manifesting a memory leak, may cause the thread count to tend to increase over time, until the process is terminated and the system cleans up the spurious threads.
Use wxLeakyBin in conjunction with OS developer tools, static code analysis e.g. CppCheck, and third party tools e.g. "Dr. Memory". You will be able to see if a code fix has been successful in eliminating a leaking memory trend.
Main Menu
The main menu contains File and Help menus. File/Quit closes the app.
The Help menu has the following items:
About
This opens a dialog to display information about the version number, build architecture, OS/Platform and build date.
Help
Opens a browser to view the contents of this help file.
Keyboard Shortcuts
[Alt+F4]: Quit - same as main menu File / Quit
[Ctrl+F1]: About - same as main menu Help / About
[F1]: Help - same as main menu Help / Help
Miscellaneous Items
Privacy
wxLeakyBin does not collect any personal information or send anything over the internet.
Feedback, Suggestions, and Bug Reports
Feedback about your experience with this application, suggestions for improvements, and bug reports should any problems occur, are always welcome, and can be reported using the contact information form at https://colinjs.com - follow the link for Contact information.