Thank you,
I will try to get a better understanding of that counter. On one of our servers, we are seeing regular valures around 200 - 250 for that paramater and spikes over 600.
Thanks again,
Kevin
Thank you,
I will try to get a better understanding of that counter. On one of our servers, we are seeing regular valures around 200 - 250 for that paramater and spikes over 600.
Thanks again,
Kevin
Can you explain the System.IO.DiskTime paramater?
I assumed this was a % cpu for all disk activity on the server. It seems this is a total time counter in ms maybe? Is this assumption correct? How do you use this information?
Is there any way to relate this to % cpu?
Thank you,
Kevin
As you can tell, I am slowly making my way through all the agent paramaters. Most of our servers have seperate OS and DATA disk sub-systems.
I assume System.IO.DiskQueue and System.IO.DiskTime are averaged totals for all disk subsystems on the server. Is that correct?
If the OS is
and the DATA volume is
Would the following counters more accurately reflect the current state of the disk queue length and the disk time for each volume?
Counter = System.IO.DiskQueue.C:"\LogicalDisk(C:)\Current Disk Queue Length":60:A:INT:"Average Current Disk Queue Length on C:"
Coutner = System.IO.DiskTime.C:"\LogicalDisk(C:)\% Disk Time":60:A:INT:"Average % Disk Time on C:"
Counter = System.IO.DiskQueue.D:"\LogicalDisk(D:)\Current Disk Queue Length":60:A:INT:"Average Current Disk Queue Length on D:"
Coutner = System.IO.DiskTime.D:"\LogicalDisk(D:)\% Disk Time":60:A:INT:"Average % Disk Time on D:"
Thank You,
Kevin
I just experimented with using process.io.xxx with a transformation of "Average delta per second", and I compared it to the:
Counter = UserProcess.SQLServer.IO.xxx:"\Process(sqlservr)\IO xxx Bytes/sec":60:A:INT:"Average I/O xxx Bytes for sqlservr.exe over past minute"
Both graphs are virtually identical.
I thought this might be helpful if anyone is reading this thread.
Kevin
Thank you,
I am starting to feel really dumb for all my little typo's. It is working great.
Thanks again,
Kevin
Thanks again for your assistance. I tried using this transfomration above at a template level but it did not seem to work. I also tried the following transfromation which did not seem to impact the results either.
sub main()
{
return ($i / 2)
}
Step 1 is set at "Keep original value"
When I have a lot of CPU activity, it still show the SQL Server CPU at roughlt 2x the CPU utilization.
Thank you,
Kevin
Yes that file exists in the C:\netxms\bin directory.
After installing on Vista x64, when you click on the NetXMS console shortcut, you get an error window:
nxcon.exe - Unable to Locate Component
This application has failed to start because LIBEAV32.dll was not found.
Re-installing the application may fix this problem.
I have other admin workstations to work with so this is not a problem for me, but I thought you might be interested in this error.
Kevin
I was just going to ask that question. I assume then that process.io.xxx with a transformation will actually be more accurate.
At the same time, my working set counter will be more accurate than process.wkset because it will be averaged over 60 seconds. Is that correct?
A future request would be to document the built-in counters with the details of how the data is obtained, 60 sec avearged, total, etc.
Thank you,
Kevin
Below is a list of custom counters I have created. When I copy the updated nxagentd.conf to a node, the first four counters are availble, but none of the rest show up in the NetXMS Console Data Collection List.
*WinPerf
Counter = UserProcess.SQLServer.CPU:"\Process(sqlservr)\% Processor Time":60:A:INT:Average % CPU Time for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.IO.ReadBytes:"\Process(sqlservr)\IO Read Bytes/sec":60:A:INT:Average I/O Read Bytes for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.IO.WriteBytes:"\Process(sqlservr)\IO Write Bytes/sec":60:A:INT:Average I/O Write Bytes for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.IO.OtherBytes:"\Process(sqlservr)\IO Other Bytes/sec":60:A:INT:Average I/O Other Bytes for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.Memory:"Process(sqlservr)\Working Set":60:A:INT:Average Memory usage for sqlservr.exe over past minute
Counter = System.IO.DiskReadTime:"LogicalDisk(C:)\%Disk Read Time":60:A:INT:Average Disk Read Time C:
Counter = System.IO.DiskWriteTime:"LogicalDisk(C:)\%Disk Write Time":60:A:INT:Average Disk Write Time C:
Counter = System.IO.DiskReadBytes:"LogicalDisk(C:)\Disk Read Bytes/sec":60:A:INT:Average Disk Read Bytes Per Sec C:
Counter = System.IO.DiskWriteBytes:"LogicalDisk(C:)\Disk Write Bytes/sec":60:A:INT:Average Disk Write Bytes Per Sec C:
Counter = System.IO.DiskReadTime:"LogicalDisk(D:)\%Disk Read Time":60:A:INT:Average Disk Read Time D:
Counter = System.IO.DiskWriteTime:"LogicalDisk(D:)\%Disk Write Time":60:A:INT:Average Disk Write Time D:
Counter = System.IO.DiskReadBytes:"LogicalDisk(D:)\Disk Read Bytes/sec":60:A:INT:Average Disk Read Bytes Per Sec D:
Counter = System.IO.DiskWriteBytes:"LogicalDisk(D:)\Disk Write Bytes/sec":60:A:INT:Average Disk Write Bytes Per Sec D:
I suspect the colon behind the drive letters are creating the problems. I have gone over this a few tims, but I can't seemt to find any other misspellings or syntax errors. Can you find anything wrong with this list? I am getting two errors in the event log. One is:
CheckCounter: PDH Error C0000BC0 in call to PdhAddCounter (Unable to parse the counter path. Check the format and syntax of the specified path.)
The other is:
Unable to add counter from configuration file. Original configuration record: System.IO.DiskReadTime:"LogicalDisk(C:)\%Disk Read Time":60:A:INT:Average Disk Read Time C:
Thank you for any help,
Kevin
Thank you,
Kevin
I would like to be able to create custom agent configuration settings and save them with a template. Then if a device is a memeber of that template, it would automatically add those custom agent configuration settings to all nodes of that template.
For example, if I create a SQL server template, I would like to store the following custom agent counters with the template. Then anytime I add a new device to that template these custom agent counters will automatically get installed:
*WinPerf
Counter = UserProcess.SQLServer.CPU:"\Process(sqlservr)\% Processor Time":60:A:INT:Average % CPU Time for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.IO.ReadBytes:"\Process(sqlservr)\IO Read Bytes/sec":60:A:INT:Average I/O Read Bytes for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.IO.WriteBytes:"\Process(sqlservr)\IO Write Bytes/sec":60:A:INT:Average I/O Write Bytes for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.IO.OtherBytes:"\Process(sqlservr)\IO Other Bytes/sec":60:A:INT:Average I/O Other Bytes for sqlservr.exe over past minute
Counter = UserProcess.SQLServer.Memory:"Process(sqlservr)\Working Set":60:A:INT:Average Memory usage for sqlservr.exe over past minute
Thank You, that makes more sense.
Going back to the % CPU time for a process:
Counter = UserProcess.SQLServer.CPU:"\Process(sqlservr)\% Processor Time":60:A:INT:Average % CPU Time for sqlservr.exe over past minute
Is there a way to divide this number by the number of CPU's? I am guessing this will need to be a script of some sort. I don't know how hyper-threading affects this counter as well.
Thank you,
Kevin
I am trying to understand the difference between CPU load and CPU utilization. I setup both of those DCI's along with a custom DCI for SQL Server CPU. I graphed them over the weekend.
It seems during our nightly maintenance tasks, (this includes a 15 GB database restore), the SQL ServerCPU pegged out at 100%. The CPU utilization pegged out just over 50% and the CPU load barely reached 5.
I am guessing that CPU Utilization and SQL Server CPU were off by a factor of 2 due to the server being a dual processor. If I remember correctly, a processes cpu can reach 200% if it happens to be pegging both CPU's, and CPU utilization is the total CPU for all processors.
But what is CPU Load meassuring?
Thank you,
Kevin
Cool this looked like it worked. Here is my nxagentd.conf:
MasterServers = srvnetxms01.nrscorporation.com
LogFile = {syslog}
FileStore = C:\NetXMS\var
SubAgent = ping.nsm
SubAgent = portcheck.nsm
SubAgent = winperf.nsm
*WinPerf
Counter = SQLServerCPU:"\Process(sqlservr)\% Processor Time":60:A:INT:Average % CPU Time for sqlservr.exe over past minute
One general question. What will happen on the agent when sqlservr process is not running. Say it is restarting or it crashed or something like that? How does the agent handle perfmon counters when they don't exist?
Thank You,
Kevin
I must have missed this in the documentation, but I didn't realize the agent was customizable. That is really cool!!
I keep getting more and more impressed with NetXMS every day.
I was looking at trying to collect the CPU time for individual processes via the agent. The supported agent paramaters are Process.UserTime and Proccess.KernerlTime.
Perfmon lists three different Process counters:
Process.% Priveleged Time
Process.% Processor Time
Process.% User Time
It appears that Process.% Processor Time = Process.% Privelaged Time + Process.% User Time.
Do you know if my understanding is correct and is there a reason the agent does not collect the Process.% Processor Time value? Also the doucmenation states that the Process.UserTime and Proccess.KernerlTime are both listed in miliseconds instead of a percentage.
Is there a way to graph the Process total CPU time as a percentage? Would you be able to add in support to have a 1/5/15 minute average for process CPU time as well?
Thank you,
Kevin
Yes you may publish it. Thank you for asking and I am glad I can help.
I updated teh spreadsheet to include support for one table per node. The results were almost identical in the size versus one big table. I attached the updated spreadsheet. There are two tabs. You should be able to use either tab to do any space planning.
The center column is the one that mimics your database enviornment. The space planning still estimates that you could reduce your database close to 3.6 GB if you used int's over varchar's in the SQL tables.
Kevin
I updated the spreadsheet to include the sizing of the clusted index and the nonclustered indexes. I pulled the index definitions from one of the idata_nnn tables.
This should be a lot more realistic comparison and this should be a lot more useful for SQL server space planning.
One estimate this is still ignoring is that I think you create a table per dci. This spreadsheet still assumes that you have one table that holds all the rows of data. I think the size will go up slightly if I modify the spreadsheet to include one table per dci, but this spreadsheet should get within 5-10% accuracy with the avg size varchar assumed from your database size.
Kevin
The non-clustered index will add some size to the database. I will try to add that into my spreadsheet to account for the non-clustered index to get a more accurate average usage.
Thank You,
Kevin