Na een hele poos klussen ben ik er nu eindelijk achter hoe ik de raw performance counters van het WMI om moet zetten naar een normale waarde.
Ik wilde namelijk een soort van DU metertje maken die via internet simpel uit is te lezen.
Het probleem is alleen dat wanneer je een paar refreshes achter elkaar doet er constant een behoorlijke processor load is. Het steeds opnieuw aanmaken van de toegang naar de teller kost blijkbaar behoorlijk wat reken kracht.
De code waarmee ik dit doe is de volgende (is een deeltje, maar wel bijna alles
)
Het is misschien niet echt netjes, en daarom zal het wel zoveel rekenkracht kosten, maar het is de enige manier waarop het mij gelukt is.
Ja, met coolmon en de XML output daarvan ook, maar daarvoor moet je dus ingelogd zijn, je kunt coolmon niet echt als service draaien dacht ik.
Ik wilde juist voorkomen dat er constant iemand ingelogd moet zijn op m'n server bakkie...
Dus mijn vraag na dit verhaal is: Weet iemand misschien een betere manier? Die hetzelfde effect heeft, maar dan zonder de behoorlijk impact op m'n toch al vrij langzame servertje
Ik wilde namelijk een soort van DU metertje maken die via internet simpel uit is te lezen.
Het probleem is alleen dat wanneer je een paar refreshes achter elkaar doet er constant een behoorlijke processor load is. Het steeds opnieuw aanmaken van de toegang naar de teller kost blijkbaar behoorlijk wat reken kracht.
De code waarmee ik dit doe is de volgende (is een deeltje, maar wel bijna alles
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| Dim wbemServices Set wbemServices = GetObject("winmgmts:\\SERVER\root\cimv2") Dim objNets Dim Up0(3) 'upload waarde 1 Dim Do0(3) 'download waarde 1 Dim Ti0(3) 'timestamp 1 Dim Up1(3) 'upload waarde 2 Dim Do1(3) 'download waarde 2 Dim Ti1(3) 'timestamp 2 Set objNets = wbemServices.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface") i = 0 For Each net in objNets Do0(i) = net.BytesReceivedPerSec Up0(i) = net.BytesSentPerSec Ti0(i) = net.Timestamp_PerfTime TB = net.Frequency_PerfTime i=i+1 Next Set objNets = Nothing 'Een keer opnieuw aanmaken, omdat er geen Refresh methode is geimplementeerd in de raw counters :( Set objNets = wbemServices.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface") i=0 For Each net in objNets Do1(i) = net.BytesReceivedPerSec Up1(i) = net.BytesSentPerSec Ti1(i) = net.Timestamp_PerfTime i=i+1 Next Set objNets = Nothing Set wbemServices = Nothing |
Het is misschien niet echt netjes, en daarom zal het wel zoveel rekenkracht kosten, maar het is de enige manier waarop het mij gelukt is.
Ja, met coolmon en de XML output daarvan ook, maar daarvoor moet je dus ingelogd zijn, je kunt coolmon niet echt als service draaien dacht ik.
Ik wilde juist voorkomen dat er constant iemand ingelogd moet zijn op m'n server bakkie...
Dus mijn vraag na dit verhaal is: Weet iemand misschien een betere manier? Die hetzelfde effect heeft, maar dan zonder de behoorlijk impact op m'n toch al vrij langzame servertje
offtopic:
sorry voor het vernueken van de layout met m'n brakke source
sorry voor het vernueken van de layout met m'n brakke source
[ Voor 11% gewijzigd door bramseltje op 06-03-2003 23:25 ]