Analyse van Subnetwerk Schaalbaarheid
Wat is Subnetwerk Schaalbaarheidsanalyse?
Voordat we het hebben over Utility Network subnetwerk schaalbaarheidsanalyse, laten we de definities bekijken van wat een subnetwork is en wat schaalbaarheidsanalyse inhoudt:
Een subnetwork:
In een utility network is een subnetwork een partitionering of topologische subset van de data in een tier waar alle deelnemende features connectiviteit hebben met dezelfde controllers. Een subnetwork wordt vaak gebruikt voor tracing om te bepalen of connectiviteit beschikbaar is.
Schaalbaarheidsanalyse:
Schaalbaarheidsanalyse is bedoeld om de mogelijkheid van een Utility Network implementatie te bepalen om meerdere verzoeken gelijktijdig uit te voeren (bijv. updateSubnetwork en exportSubnetwork). Dit wordt meestal gedaan om te begrijpen of tijdsdominante bedrijfsdoelstellingen kunnen worden gehaald. Bijvoorbeeld, kan een bepaalde implementatie 5.000 subnetwerken exporteren binnen een tijdsbestek van 4 uur?
Het antwoord op deze vraag is onbekend totdat het getest en geverifieerd is.
De schaalbaarheid van een implementatie is gekoppeld aan hoeveel gelijktijdigheid tegelijk kan plaatsvinden terwijl optimale prestaties van de relevante operaties behouden blijven. Dit artikel bespreekt hoe gelijktijdigheid kan worden toegepast via een test (inbegrepen in het artikel).
Opmerking: Voor meer informatie over een subnetwork, zie: De levenscyclus van Subnetwork in Utility Network
Ons Utility Network Doel en Doelstelling
- Automatiseer de taken voor het bijwerken of exporteren van een lijst met subnetwerken
- Leg prestatie tijd vast
- Totale taak
- Individuele operaties (bijv. tijd om een specifiek subnetwork bij te werken)
- Systeem configureerbaar om aan eisen te voldoen
- Tijdsgevoelig
- Resourcegevoelig
Waarom Update/Export Subnetwerk Analyse Uitvoeren?
- Typisch doel en tijdsbeperkingen zijn een zakelijke vereiste
- Voer twee functies per subnetwork uit
- Update (updateSubnetwork)
- Wordt gewoonlijk uitgevoerd nadat zowel bewerken als netwerk topologie valideren zijn uitgevoerd of netwerk topologie inschakelen is gedaan
- Export (exportSubnetwork)
- Wordt gebruikt om informatie over het subnetwork naar een bestand te extraheren dat vervolgens door externe systemen zoals outage management kan worden gebruikt
- Voordat een subnetwork uit het systeem kan worden geëxporteerd, moet het up-to-date zijn (geüpdatet)
Zowel zijn belangrijke utility network functies. Als GIS-beheerder of ontwikkelaar is het belangrijk te begrijpen hoe deze operaties schalen. Het begrijpen van de verwerkingstijd voor een lijst met subnetwerken is de primaire analyse.
Dit kan verder worden uitgebreid door oplossingen te verkennen die de taak optimaliseren voor tijd of systeembronnen. Deze uitdagingen hebben vergelijkbare benaderingen over hoe de taak van het bijwerken of exporteren van veel subnetwerken te volbrengen.
- Zicht krijgen op bedrijfsdoelstellingen
- Exporteren van Subnetworks kan meer rekentijd kosten afhankelijk van de gebruikte opties
- Dergelijke opties kunnen een zakelijke vereiste zijn
- Prestaties en schaalbaarheid kunnen architectuur beïnvloeden
- Vanuit de testresultaten en bevindingen
- Implementatieconfiguratie moet mogelijk worden aangepast om aan zakelijke behoeften te voldoen
Hoe Subnetwerk Schaalbaarheidsanalyse Uitvoeren?
Lijst met Subnetwerken
Laten we eerst een lijst met subnetwerken uit de Utility Network dataset halen.
Dit kan op verschillende manieren worden gedaan:
- ArcGIS Pro
- ArcPy script
- SQL select statements
SQL voorbeeld:
- Aansluiten op de Utility Network geodatabase
- Zoek het ObjectId voor de Subnetwork tabel:Dit ObjectId is dynamisch en kan variërenType GUID is constant
/ul/li>/ul/pre class="lia-code-sample language-sql">-- Zoek Utility Network ObjectId voor Subnetwork tabel
SELECT OBJECTID FROM sde.GDB_ITEMS WHERE type='{37672BD2-B9F3-48C1-89B5-8C43BBBB6D57}'/preVoor onze voorbeeld database gaf dit 446Deze ObjectId waarde zal worden gebruikt in de volgende query/ul/li>/ul/liExporteer de lijst met subnetwerken/ul/li>/ul/pre class="lia-code-sample language-sql">-- Exporteer lijst met Subnetworks
SELECT
T1.SUBNETWORKCONTROLLERNAME, T1.SUBNETWORKNAME, T1.ISDIRTY,
T1.ISDELETED, T1.TIERNAME, T1.DOMAINNETWORKNAME, T1.GDB_FROM_DATE
FROM
elec.UN_446_SUBNETWORKS T1
INNER JOIN (SELECT SUBNETWORKNAME, MAX(GDB_FROM_DATE) AS MaxDate
FROM
elec.UN_446_SUBNETWORKS
GROUP BY SUBNETWORKNAME) T2
ON T1.SUBNETWORKNAME = T2.SUBNETWORKNAME
AND T1.GDB_FROM_DATE = T2.MaxDate/preSla uitvoer op in een bestand (csv of tsv)Sommige SubnetworkControllerNames kunnen komma's bevatten (bijv. ",") en een tab-gescheiden bestand zou geschikter zijn dan een komma-gescheiden bestand/ul/li>/ul/li>/ulVoor de Utility Network dataset die in dit artikel wordt gebruikt, ziet de resulterende lijst met subnetwerken er als volgt uit wanneer de datarijen gescheiden zijn door tabs./pOpmerking: Er wordt aangenomen dat de huidige staat van het netwerk schone en vuile subnetwerken bevat. Hoe subnetwerken vuil worden valt buiten de reikwijdte van dit artikel.Opmerking: Er kunnen verschillende zakelijke factoren meespelen bij het selecteren van subnetwerken. Deze query helpt u op weg.Apache JMeterZoals vermeld in andere Community-artikelen, is Apache JMeter een gratis testtool. Het is uitstekend geschikt om het REST endpoint van ArcGIS Enterprise te testen voor vele functies:Hoewel er veel testtools beschikbaar zijn, zal JMeter worden gebruikt om een Utility Network service in ArcGIS Enterprise aan te roepen voor updateSubnetwork en exportSubnetwork verzoeken.Utility Network Dataset -- Naperville ElectricNaperville Electric data, zoals gezien vanuit ArcGIS Pro:Update SubnetworkApache JMeter Bestandssysteemweergave van Test Plan map<\/span><\/P>Buiten JMeter is het Test Plan slechts een jmx-bestand, op zichzelf staand. Zoals vermeld in andere Community-artikelen, wordt aanbevolen om een mappenstructuur te creëren voor het project waar je mee werkt. Dit kan helpen bij het beheer, vooral als je veel verschillende tests hebt die verschillende dingen doen. In de hierboven afgebeelde mappen kunnen de lijst van subnetwerken en testresultaten worden bewaard in de UpdateSubnetwork-directory waar het minder waarschijnlijk is dat ze verward worden met andere testuitvoergegevens.<\/P>Het Update Subnetwork Test Plan<\/H2>- Om het Apache JMeter Test Plan te downloaden dat in dit artikel wordt gebruikt, zie: UpdateSubnetwork1.zip<\/A><\/STRONG> <\/LI>Het openen van het Test Plan in Apache JMeter zou er ongeveer als volgt uit moeten zien:<\/SPAN>Pas de User Defined Variables aan om bij jouw omgeving te passen<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Belangrijke Componenten van het Test Plan<\/H2>Met het UpdateSubnetwork Test Plan uitgeklapt, zijn de volgende elementen zichtbaar:<\/P>User Defined VariablesLijst hierboven, gebruikt om de test gemakkelijk aan te passen aan een omgeving<\/LI><\/UL><\/LI>Aggregate ReportGebruikt voor het debuggen van de test en analyse na de test<\/LI><\/UL><\/LI>Thread GroupBepaalt de thread-concurrentie of scalability<\/STRONG><\/U> van de test<\/LI>Aangeraden om standaardwaarden te gebruiken (bijv. 1 testthread) tijdens het opbouwen van een test<\/LI><\/UL><\/LI>GenerateTokenVerkrijgt een token van ArcGIS EnterpriseGebruikt eerder gedefinieerde referenties<\/LI><\/UL><\/LI>Bewaart deze tijdens de test<\/LI><\/UL><\/LI>While Controller SyncGebruikt wanneer bedrijfslogica bepaalt dat oproepen synchronous<\/STRONG> moeten zijn<\/LI>Lus over lijst van subnetwerken<\/LI><\/UL><\/LI>CSV Data Set ConfigKoppelt lijst van subnetwerken aan testCSV of TSV data tekstbestand<\/LI><\/UL><\/LI><\/UL><\/LI>If ControllerEen logische tak van de test die Groovy gebruikt<\/LI>Volgt tak als subnetwork dirty is (IsDirty=True of IsDirty=1)<\/LI><\/UL><\/LI>USN Request (${SUBNETWORKNAME})Het testelement dat het verzoek uitvoert om het grootste deel van het werk te doen<\/LI>Vanuit de databron wordt ${SUBNETWORKNAME} gevuld met de naam van het subnetwork<\/LI><\/UL><\/LI>While Controller AsyncGebruikt wanneer bedrijfslogica bepaalt dat oproepen asynchronous<\/STRONG> moeten zijnIdeaal voor zeer langlopende updateSubnetwork-verzoeken<\/LI><\/UL><\/LI>Lus over lijst van subnetwerken<\/LI>Om te gebruiken:Klik met rechts op While Controller Async en selecteer Enable<\/STRONG>
- Klik met rechts op While Controller Sync en selecteer Disable<\/STRONG>
<\/span>
Opmerking: Stel de Thread Group waarden in om het scalability-profiel van de Update Subnetwork-test te bepalen. Een hogere waarde voor "Users" betekent een hogere maximale gelijktijdigheid die de test zal bereiken. Verhoog "Rampup" om geleidelijk het aantal gelijktijdige gebruikers over die tijdsduur (in seconden) te verhogen.<\/STRONG>
Een Nader Kijkje naar GenerateToken<\/H2>Het GenerateToken-verzoek is een belangrijk onderdeel van de test. Het vindt vroeg in de test plaats en de Utility Network-service zal waarschijnlijk authenticatie vereisen.<\/P>Het Generate Token Verzoek<\/H3>
<\/span>Het Vangen van het Token<\/H3>Het aanvragen van het token is half werk. Het andere deel is het vangen en opslaan als variabele zodat JMeter er toegang toe heeft tijdens het uitvoeren van de test. Dit wordt gedaan met het Regular Expression Extractor-element uit JMeter.<\/SPAN>
<\/span>Opmerking: Hoe reguliere expressies werken valt buiten de reikwijdte van dit artikel, maar in essentie zoekt het naar een specifieke tekenreeks in de respons en als die gevonden wordt, plaatst het deze in een JMeter variabele genaamd agstoken.<\/SPAN>Update Subnetwork Test Plan Data Bestand -- De Lijst van Subnetwerken<\/H2>Het CSV Data Set Config-element speelt een grote rol omdathet Koppelt onze subnetwork-datalijst aan de test.<\/SPAN>
<\/span>Opmerking: Sommige Utility Network datasets kunnen het komma-teken bevatten (bijv. ",") in de SubnetworkControllerName. Waar dit voorkomt, is het voordelig om de lijst met subnetwerken op te slaan als tabgescheiden waarden in plaats van komma gescheiden waarden.<\/STRONG>Opmerking: In gevallen waar een tabgescheiden waardenbestand wordt gebruikt, verwacht JMeter nog steeds dat de kopregel in de lijst met subnetwerken komma gescheiden is.<\/STRONG >If Controller Logica < /H2 >< P >Voor gemak is testlogica toegevoegd om alleen subnetwerken uit de lijst bij te werken als het IsDirty veld gelijk is aan 1.
Groovy wordt gebruikt om deze taak in de test uit te voeren.< /SPAN ></ P >< P >Apache Groovy is een scripttaal gebaseerd op Java die krachtige functies en programmatische ondersteuning biedt voor zaken die moeilijk kunnen zijn voor standaard JMeter-testelementen.< /SPAN ></ P >< P >
< /span ></ P >< H2 id = "toc-hId--254079019">De Update Subnetwork HTTP Request < /H2 >< P >Dit testelement in het Test Plan is verantwoordelijk voor < /SPAN >updateSubnetwork < /SPAN >weboproepen in de test.< /SPAN > < /SPAN >< / P >< P >Deze component doet het verzoek en JMeter evalueert de respons die terugkomt van ArcGIS Enterprise via het REST-eindpunt.< /SPAN >< / P >< P >
< /span ></ P >< H2 id = "toc-hId--2061533482">Testuitvoering < /H2 >< P >Grafische gebruikersinterface (GUI) uitvoering < /SPAN >< / P >< UL >< LI >Ideaal voor testontwikkeling en debugging < /SPAN >< / LI >< LI >Play en Stop knoppen < /SPAN >< / LI >< / UL >< P >
< /span > < / P >< P >
< /span >< / P >< P >Commandoregeluitvoering < /SPAN >< / P >< UL >< LI >Geweldig voor officiële testruns < /SPAN >< UL >< LI >Efficiënter geheugengebruik < /SPAN >< UL >< LI >Vooral als luisteraars zoals Aggregate Report zijn uitgeschakeld voor de run < /SPAN >< / LI >< / UL >< / LI >< / UL >< / LI >< LI >Play (consoleRun.bat) en Stop (Control-C) < /SPAN >< UL >< LI >Wanneer de test wordt uitgevoerd via consoleRun.bat, zal er een results.jtl-bestand worden gegenereerd in de results-map < /STRONG > < /SPAN > < UL > < LI > < SPAN >Dit is het \results-bestand\ en bevat waardevolle prestatie-informatie over bewerkingen van de test
Opmerking: Het is altijd aanbevolen om de starttijd en duur van de load test af te stemmen met het juiste personeel van uw organisatie. Dit zorgt voor minimale impact op gebruikers en andere collega's die mogelijk ook uw on-premise ArcGIS Enterprise Site moeten gebruiken. Bovendien helpt dit om systeemruis van andere activiteiten en gebruik te voorkomen die de testresultaten kunnen "vervuilen".<\/STRONG><\/FONT><\/P>Opmerking: Om verschillende redenen wordt sterk geadviseerd om nooit load tests uit te voeren op services geleverd door ArcGIS Online.<\/STRONG><\/FONT><\/P>Analyse -- Rapportage en Evaluatie<\/H2>Aggregate Report Element (Test Debugging)<\/SPAN><\/H3>Uit deze analyse kunnen we gemakkelijk de UpdateSubnetwork_Sync <\/STRONG>transactie en enkele belangrijke statistieken zien die ons belangrijke prestatie-informatie geven over de operatie in het algemeen. <\/SPAN><\/P>
<\/P>Voor een ruwe totale tijdschatting, bij gebruik van 1 testthread gelijktijdigheid, vermenigvuldig gewoon het aantal samples met het gemiddelde. Bijvoorbeeld: "# Samples * Gemiddelde" = T<\/SPAN>otale Testuitvoertijd<\/SPAN> (<\/SPAN>ms<\/SPAN>)<\/SPAN><\/SPAN><\/P>Voor "officiële" testruns wordt aanbevolen om de Aggregate Report listener uit te schakelen vanuit de Tree (een eenvoudige rechtermuisklik en dan selecteer Uitschakelen) en deze alleen te gebruiken voor testontwikkeling, debugging en post-test verwerking. <\/SPAN><\/P>Opmerking: Voor post-test verwerking kan het Aggregate Report nog steeds worden gebruikt om een testresultaatbestand te doorzoeken, selecteren en laden, zelfs als het is uitgeschakeld in de GUI.<\/STRONG><\/FONT><\/P>Het Resultaatbestand<\/SPAN><\/H3>Wanneer uitgevoerd vanaf het commandoregelscript, produceert JMeter een resultaatbestand als onderdeel van zijn output. <\/SPAN>Het resultaatbestand (*.jtl bestand), bevat ruwe aanvraaginformatie in tekstvorm.<\/SPAN><\/P>De inhoud van dit bestand bevat een lijst van alle subnetwerken en hun individuele responstijden. Hoewel het gemakkelijk te openen en bekijken is met elke gewone editor, wordt analyse in deze vorm niet aanbevolen.<\/SPAN><\/P>
<\/P>Aggregate Report Element (Post-Test Analyse)<\/SPAN><\/H3>Laten we terugkeren naar het Aggregate Report element voor wat post-test analyse. Vanuit de JMeter GUI, klik op de Bladeren knop om het jtl resultaatbestand te vinden en selecteer Openen om het te laden.<\/P>Zodra geladen, wordt het jtl bestand verwerkt door JMeter en wordt er een statistisch rapport gegenereerd in de Aggregate Report sectie.<\/P>Het Aggregate Report element is interactief, dus je kunt klikken op het Maximum kopveld om gemakkelijk de lijst opnieuw te sorteren en subnetwerken te vinden die de meeste tijd in beslag namen. De UpdateSubnetwork_Sync <\/STRONG>transactie staat nog steeds vermeld, wat cruciaal is voor het begrijpen of de algemene cijfers voldoen aan bepaalde prestatie-eisen vanuit een service level agreement (SLA).<\/SPAN><\/SPAN><\/SPAN><\/P>
<\/P>Opmerking: Het aantal subnetwerken in deze dataset is klein. Testresultaten van productiedatasets zouden meer samples bevatten.<\/SPAN><\/SPAN><\/STRONG><\/FONT><\/P>De Analyse Verder Uitbreiden<\/SPAN><\/H3>Aangezien het resultaatbestand komma-gescheiden waarden bevat, kan het gemakkelijk worden geopend in een spreadsheet.<\/P>
<\/P>Een weergave van de resultaatdata met wat minimale opmaak.<\/P>Dit is goed maar kan het beter? <\/P>
<\/P>Het grafisch weergeven van de transactieprestaties biedt verbeterde duidelijkheid.<\/P>Opmerking: <\/STRONG>Als je alleen geïnteresseerd bent in algemene cijfers, filter dan individuele subnetwork-aanvragen eruit (bijv. het veld waar responseMessage = OK).<\/STRONG><\/P>Export Subnetwork<\/SPAN>Apache JMeter 011 File system view of Test Plan folder0b<\/> role="button" title="AaronLopez_1-1770329982691.png" alt="AaronLopez_1-1770329982691.png" "/><\/span><\/P>Een nadere blik op de Groovy-logica:<\/P>\/\/ Pak variabelen en enkele dynamische artefacten om het bestandssysteem pad van exportSubnetwork output samen te stellen
\/\/ Onderzoek het bestandssysteem van exportSubnetwork output op de schijf
String outputUrl = vars.getObject("outputUrl"); \/\/ Vastgelegd van vorige aanvraag (exportSubnetwork)
String outputFormat = vars.getObject("outputFormat"); \/\/ Door gebruiker gedefinieerde variabele
String subnetworkName = vars.getObject("SUBNETWORKNAME"); \/\/ Testplanvariabele uit CSV
String serverName = vars.getObject("serverHostname"); \/\/ Door gebruiker gedefinieerde variabele
String folderServiceName = vars.getObject("serviceName"); \/\/ Door gebruiker gedefinieerde variabele
File srvc = new File(folderServiceName);
String folderName = srvc.getParent(); \/\/ Isoleert mapnaam van service
String serviceName = srvc.getName(); \/\/ Isoleert servicenaam
String outputName = org.apache.commons.io.FilenameUtils.getBaseName(outputUrl); \/\/ Isoleert bestandsnaam van exportSubnetwork output
outputNamewExt = outputName + "." + outputFormat; \/\/ Voeg bestandsextensie weer toe
\/\/ Maak bestandssysteem pad waar output zou moeten staan; ga ervan uit dat arcgisoutput directory gedeeld is met gebruiker die JMeter uitvoert
\/\/ Gebruik "\\\\MyServer.domain.org\\arcgisoutput\\" als serverName variabele niet ArcGIS Server machine is
String cifsPath = "\\\\" + serverName + "\\arcgisoutput\\" + folderName + "\\" + serviceName + "_MapServer\\" + outputNamewExt;
File file = new File(cifsPath);
long cifsFileSize=file.length(); \/\/ Verkrijg grootte van exportSubnetwork output
double oneKilobyte=1024.0
double cifsFileSizeKB=(cifsFileSize\/oneKilobyte);
double cifsFileSizeKBRound=cifsFileSizeKB.round(2); \/\/ Gebruiksvriendelijke geformatteerde bestandsgrootte
log.info("folderServiceName: " + folderServiceName);
log.info("outputUrl: " + outputUrl);
log.info("cifsPath: " + cifsPath);
log.info("cifs file.exists: " + file.exists().toString());
log.info("serverName: " + serverName + " subnetworkName: \"" + subnetworkName + "\" size: " + cifsFileSizeKBRound + " KB outputName: " + outputNamewExt); \/\/ Schrijf informatie naar JMeter log
vars.putObject("outputFileSizeKB",cifsFileSizeKBRound);<\/code><\/pre>De tweede Sample geeft eenvoudigweg de vastgelegde bestandsgrootte weer in de Naam-eigenschap van het JSR223 Sampler-element in de test. Deze waarde wordt vervolgens gerapporteerd als de naam van de aanvraag in het jtl-resultaatbestand, wat kan worden gebruikt voor verdere analyse.<\/P>Bijvoorbeeld:<\/P>
<\/span><\/H2>Individuele Subnetwork Responstijd verkrijgen van een Asynchrone Taak<\/SPAN><\/H3>De Asynchrone Uitvoerstijl<\/SPAN><\/H4>De standaard uitvoerstijl in de test is synchroon. Het is eenvoudig en rechttoe rechtaan. Verstuur de aanvraag en wacht gewoon op de respons. Dit is de ideale aanpak wanneer de responstijd per aanvraag minder dan 10 minuten wordt verwacht. <\/SPAN><\/P>Voor aanvragen die langer<\/EM> dan 10 minuten duren, is asynchroon de aanbevolen aanpak. Er zijn echter meer bewegende delen bij een asynchrone test:<\/SPAN><\/P>Er wordt een taak ingediend<\/SPAN><\/LI>De taakstatus wordt periodiek in een lus gecontroleerd<\/SPAN>Er is meer dan één lus<\/SPAN><\/LI><\/UL><\/LI>Zodra voltooid kan de uitvoerlocatie voor die taak worden vastgelegd<\/SPAN><\/LI><\/UL>Elk van deze stappen is een eigen aanvraag in de test, en elk heeft een responstijd die wordt vastgelegd in het resultaatbestand. Terwijl JMeter deze totale tijd rapporteert onder de transactie naam ExportSubnetwork Async (dit is geweldig omdat het handige algemene statistieken over de functie biedt) koppelt het niet gemakkelijk elke individuele subnetwork aan zijn respectieve responstijd.<\/SPAN><\/P>
<\/span><\/P>Groovy komt weer te hulp<\/SPAN><\/H4>Het berekenen van een enkele responstijd voor elke subnetwork operatie kan worden bereikt in Groovy door een timer te zetten aan het begin en einde van de asynchrone lus. Groovy berekent eenvoudig het verschil en rapporteert de tijd terug in de test (zoals bij de grootteberekening).<\/SPAN><\/P>
<\/span><\/P>Een nadere blik op de Groovy-logica:<\/P>\/\/ Pak variabelen en enkele dynamische artefacten om het bestandssysteem pad van exportSubnetwork output samen te stellen
\/\/ Onderzoek het bestandssysteem van exportSubnetwork output op de schijf
String outputUrl = vars.getObject("outputUrl"); \/\/ Vastgelegd van vorige aanvraag (exportSubnetwork)
String outputFormat = vars.getObject("outputFormat"); \/\/ Door gebruiker gedefinieerde variabele
String subnetworkName = vars.getObject("SUBNETWORKNAME"); \/\/ Testplanvariabele uit CSV
String serverName = vars.getObject("serverHostname"); \/\/ Door gebruiker gedefinieerde variabele
String folderServiceName = vars.getObject("serviceName"); \/\/ Door gebruiker gedefinieerde variabele
String startEpoch = vars.getObject("StartEpoch"); \/\/ Testplanvariabele vanuit While Controller Async
String stopEpoch = vars.getObject("StopEpoch"); \/\/ Testplanvariabele vanuit While Controller Async
File srvc = new File(folderServiceName);
String folderName = srvc.getParent(); \/\/ Isoleert mapnaam van service
String serviceName = srvc.getName(); \/\/ Isoleert servicenaam
String outputName = org.apache.commons.io.FilenameUtils.getBaseName(outputUrl); \/\/ Isoleert bestandsnaam van exportSubnetwork output
outputNamewExt = outputName + "." + outputFormat; \/\/ Voeg bestandsextensie weer toe
\/\/ Maak bestandssysteem pad waar output zou moeten staan; ga ervan uit dat arcgisoutput directory gedeeld is met gebruiker die JMeter uitvoert
\/
\/
Gebruik "\\\\MyServer.domain.org\\arcgisoutput\\" als serverName variabele niet ArcGIS Server machine is
String cifsPath = "\\\\" + serverName + "\\arcgisoutput\\" + folderName + "\\" + serviceName + "_MapServer\\" + outputNamewExt;
File file = new File(cifsPath);
long cifsFileSize=file.length(); \/\ Get grootte van exportSubnetwork output
long startEpochLong = Long.parseLong(startEpoch);
long stopEpochLong = Long.parseLong(stopEpoch);
long responseTimeMS = stopEpochLong-startEpochLong; \/\ Bereken een ***geschatte responstijdwaarde*** van vorige aanvraag (alleen voor asynchrone exportSubnetwork)
double oneKilobyte=1024.0
double cifsFileSizeKB=(cifsFileSize / oneKilobyte);
double cifsFileSizeKBRound=cifsFileSizeKB.round(2); \/\ Gebruiksvriendelijke geformatteerde bestandsgrootte
double responseTimeSec = ((responseTimeMS/1000).round(2)); \/\ Converteer geschatte responstijd in milliseconden naar seconden
log.info("folderServiceName: " + folderServiceName);
log.info("outputUrl: " + outputUrl);
log.info("cifsPath: " + cifsPath);
log.info("cifs file.exists: " + file.exists().toString());
log.info("serverName: " + serverName + " subnetworkName: \"" + subnetworkName + "\" size: " + cifsFileSizeKBRound + " KB responseTimeEstimate: " + responseTimeSec + " seconden outputName: " + outputNamewExt); \/\ Schrijf informatie naar JMeter log
vars.putObject("outputFileSizeKB",cifsFileSizeKBRound); \/\ Plaats berekende waarde in variabele om later te gebruiken
vars.putObject("responseTimeSec",responseTimeSec); \/\ Plaats berekende waarde in variabele om later te gebruiken<\/code><\/pre>Aanvullende Strategieën<\/SPAN><\H1>Tijd versus Middelen<\Span>
Voorbeeld tijdsbeperking
Noodzaak om taak binnen bepaalde duur te voltooien (bijv. exporteer 5.000 subnetwerken in 4 uur)<\Span>
Klant (JMeter) en server (ArcGIS Server) kunnen samenwerken om schaalbaarheid deployment te testen<\Span>
Het eindresultaat van totale testlooptijd is schaalbaarheidsanalyse
Vanuit Thread Group element, verhoog aantal Threads en Ramp-up periode
Overwegingen
Middel-intensief op CPU naarmate meer service-instanties worden gebruikt
Zowel servers als testclientmachine
Deze hogere mate van gelijktijdigheid kan andere gebruikers beïnvloeden
Coördineer en plan dienovereenkomstig
Voorbeeld middelenbeperking
- Huidige setup
- Aangeraden voor initiële testontwikkeling en debugging
- Langer totale rekentijd
- Meest vergevingsgezind qua middelen
- Minder testthreads of gelijktijdige uitvoering
- Vereist minder service-instanties op Server
- Bespaar geheugenmiddelen
Laatste gedachten
P>The Apache JMeter Testplannen in dit artikel vertegenwoordigen een programmatische benadering voor het toepassen van belasting op een Utility Network-service via de functies updateSubnetwork en exportSubnetwork. <\/P>Begrijpen hoe het systeem reageert op deze belasting via responstijdcijfers die door ArcGIS Enterprise worden geretourneerd, kan helpen bepalen of de implementatie aan uw prestatiebehoeften kan voldoen.<\/P>De opgestelde tests kunnen worden aangepast om te voldoen aan tijdsuitdagingen (meer gelijktijdigheid, hogere schaalbaarheid vereist) of resource-uitdagingen (geheugenbeperkte systemen).<\/P>Strategieën voor het analyseren van de testresultaten werden ook besproken, waaronder het gebruik van het Aggregate Report in het JMeter Testplan voor enkele snelle prestatiestatistieken, evenals het grafisch weergeven van individuele responstijden voor visuele duidelijkheid.<\/P>Hoewel het algemene proces voor de Update Subnetwork- en Export Subnetwork-testplannen vergelijkbaar is, bevatte Export Subnetwork een extra Transactie die de resulterende output op ArcGIS Server onderzocht met Groovy om de bestandsgrootte voor elk subnetwork te verkrijgen.<\/P>Om de gebruikte Apache JMeter Testplannen in dit artikel te downloaden, zie:UpdateSubnetwork1.zip<\/A><\/STRONG><\/LI>ExportSubnetwork1.zip<\/A><\/STRONG> <\/LI><\/UL><\/LI><\/UL>