Ik heb een webapplicatie welke een aantal server (zo'n 80) monitored. Op het moment werkt het maar het is nogal traag. De app haalt eens in de zoveel tijd (10 minuten) de nieuwe info op en cached deze. Ook kan men aangeven handmatig te refreshen naar dit duurt zo'n ruime 3 seconden per server (ruime 7 minuten in totaal).
Ik voer op elke server aan aantal acties uit, gewoon vanuit PHP. Ik heb van de server's alleen de IP's. Eeerst haal ik van deze IP's het DNS record op (reverse). Ook haal ik van al deze machines de NetBIOS namen op, en welke users er op dit moment ingelogd zijn (ook via NetBIOS). Ook check ik per server of deze online is door één of meer socket connecties te openen.
Het checken of een server online is doe ik op de volgende manier:
Deze code looped maximaal 3 keer. Ik heb een 3 tal poorten. Als eerst check ik op algemene Windows poort (3389). Als hier reactie op is, dan is de server online. Zo niet, check dan poort 22 en 80. Als geen van deze poorten online is ga ik er maar van uit dat de server offline is.
Op deze manier heb ik naar mijn idee wat meer zekerheid dan een ping aangezien ik ook kan kijken of een bepaalde service draait, en maakt het qua tijd niets uit in vergelijking tot ping. Kan iemand dit bevestigen?
De reverse DNS name ophalen doe ik op de volgende manier:
Dit scheen sneller te zijn dan het via de php functie 'gethostbyaddr' te doen, ik neem aan dat dit niet veel sneller kan?
Het NetBIOS gedeelte is wat ingewikkelder... Eerst check ik met het (Windows) commando 'sc' wat de status van de messenger service is. Als deze 'STOPPED' is, dan start ik deze. Wanneer de service eenmaal draait, haal ik met 'nbtstat' de nodige info op (NetBIOS name en actieve user(s)). Daarna zet ik de status van de messenger service weer terug naar hoe het was.
Mijn vraag: Zijn er manieren om dit process te versnellen? Ik kan voor PHP niet echt manieren vinden om relatief simpel de zooi multi-threaded te laten draaien (meerderen nslookup processen naast elkaar o.i.d) wat wel de mooiste oplossing zou zijn. Ook ben ik niet erg handig in andere talen waarmee ik een app zou kunnen maken die dit kan doen.
Op het moment draait dit alles op een Windows bak, wat ook zo moet blijven aangezien ik gebruik maak van Windows Management Instrumentation wat er niet is voor Linux.
Nogmaals, elke performance tip is welkom. Alvast bedankt!
Ik voer op elke server aan aantal acties uit, gewoon vanuit PHP. Ik heb van de server's alleen de IP's. Eeerst haal ik van deze IP's het DNS record op (reverse). Ook haal ik van al deze machines de NetBIOS namen op, en welke users er op dit moment ingelogd zijn (ook via NetBIOS). Ook check ik per server of deze online is door één of meer socket connecties te openen.
Het checken of een server online is doe ik op de volgende manier:
PHP:
1
| fsockopen($ip, $port, $erno, $erst, 1); |
Deze code looped maximaal 3 keer. Ik heb een 3 tal poorten. Als eerst check ik op algemene Windows poort (3389). Als hier reactie op is, dan is de server online. Zo niet, check dan poort 22 en 80. Als geen van deze poorten online is ga ik er maar van uit dat de server offline is.
Op deze manier heb ik naar mijn idee wat meer zekerheid dan een ping aangezien ik ook kan kijken of een bepaalde service draait, en maakt het qua tijd niets uit in vergelijking tot ping. Kan iemand dit bevestigen?
De reverse DNS name ophalen doe ik op de volgende manier:
PHP:
1
| $GetDNSRecord = `nslookup -timeout=1 -retry=1 -querytype=A $ip`; |
Dit scheen sneller te zijn dan het via de php functie 'gethostbyaddr' te doen, ik neem aan dat dit niet veel sneller kan?
Het NetBIOS gedeelte is wat ingewikkelder... Eerst check ik met het (Windows) commando 'sc' wat de status van de messenger service is. Als deze 'STOPPED' is, dan start ik deze. Wanneer de service eenmaal draait, haal ik met 'nbtstat' de nodige info op (NetBIOS name en actieve user(s)). Daarna zet ik de status van de messenger service weer terug naar hoe het was.
Mijn vraag: Zijn er manieren om dit process te versnellen? Ik kan voor PHP niet echt manieren vinden om relatief simpel de zooi multi-threaded te laten draaien (meerderen nslookup processen naast elkaar o.i.d) wat wel de mooiste oplossing zou zijn. Ook ben ik niet erg handig in andere talen waarmee ik een app zou kunnen maken die dit kan doen.
Op het moment draait dit alles op een Windows bak, wat ook zo moet blijven aangezien ik gebruik maak van Windows Management Instrumentation wat er niet is voor Linux.
Nogmaals, elke performance tip is welkom. Alvast bedankt!