top of page

Sage 100 Performance (Konfiguration) / Common infos performance (configuration)

(alle Versionen/all versions)

Donnerstag, 11. Mai 2023

Deutsch

"Falsche" Sage Dienst Konfiguration

Zu wenige Applikationsserver und falsche Konfiguration der Applikationsserver


Deutsch


"Falsche" Sage Dienst Konfiguration

Einige Sage Komponenten sind nicht direkt für die Ausführung innerhalb von Windows Diensten ausgelegt.

Ein gutes Beispiel dafür ist das Reporting-Control von Sage, eine Sammlung von .net-DLL-Dateien, die auf der Basis der Software "StimulSoft", diverse Funktionalitäten für das Rendern und letzten Endes Drucken von Berichten in der Sage 100 bereitstellen, z.B das "Sagede.Shared.ReportViewerControl.ReportViewerViewModel" und Methoden darin wie "PrintReport" von Sage.

Dabei verwendet Sage zahlreichen Code aus dem WinForms-Namespace u.a. , der laut Microsoft nicht für die Ausführung innerhalb von Windows Diensten geeignet ist.

Allgemein sind die Bibliotheken von Sage für das Drucken recht "ressourcenhungrig", was bei der Ausführung innerhalb von Windows Diensten mit dem Konto "Lokales System" bzw. "localsystem" irgendwann zu Speicherproblemen des Desktop Heap Speichers führen kann. Abgesehen davon, dass "local system" auch nicht immer unbedingt alle notwendigen Rechte besitzt.



ree






Typische Fehlermeldungen der Sage 100 in der Oberfläche und auch im Sage TraceLog sind dann Hinweise auf "System.OutOfMemoryException":

ree






Alternativ können auch andere Fehlermeldungen im TraceLog erscheinen. Nachfolgend einige Beispiele für Fehlermeldungen, die auch die Rechteproblematik noch einmal verdeutlichen.

System.Drawing.Printing.InvalidPrinterException: Kein Drucker installiert.
Exception ... at Sagede.Shared.ReportViewerControl.WpfPrintUtils.GetPrintTickets(PrinterSettings[] printerSettings)

Sage ruft in der Methode "Sagede.Shared.ReportViewerControl.WpfPrintUtils.GetPrintTickets" die .net-Framework-Klasse "PrintTicket" auf, um Druckerinfos zu ermitteln.

Je nach vorhandener Laufzeitumgebung unter Windows gibt es für das "Lokale Systemkonto" (localsystem) im Sage Dienst dann ein Zugriffsproblem beim Abfragen dieser Druckereigenschaften.

Siehe:

Microsoft .net-API-Doku zu "PrintTicket".

Deutlicher Hinweis von Microsoft dazu:

Classes within the System.Printing namespace are not supported for use within a Windows service or ASP.NET application or service. Attempting to use these classes from within one of these application types may produce unexpected problems, such as diminished service performance and run-time exceptions.

Lösungsansatz 1

Der Schalter "Interaktion mit Desktop zulassen" bzw. "Datenaustausch zwischen Dienst und Desktop" zulassen erhöht den Desktop Heap Speicher etwas, adressiert aber nicht das Berechtigungsproblem.


Lösungsansatz 2

Alle Sage Dienste mit "echten" Benutzern als Dienstkonto konfigurieren. Für jeden Sage Dienst einen eigenen Benutzer verwenden/einrichten!

Dies ist auch der von Sage favorisierte Weg.

Zitat Sage:

-Eigene Benutzer für jeden Dienst definieren. User und Policy-Einstellungen hierfür optimieren. Eigene Benutzer für die Dienste anlegen, da jeder Benutzer seinen eigenen Desktop Heap Speicher verwaltet. Beispiel: SageAS, SageBS, SageMB, SageK

Dabei ist es wichtig, dass das Einsetzen als Teil des Betriebssystems und das Anmelden als Dienst berücksichtigt wird.


Zu wenige Applikationsserver und falsche Konfiguration der Applikationsserver

Als sehr häufiges Problem in der Praxis erweisen sich Installationen, bei denen zu viele Dienste und Funktionen auf einer Maschine ausgeführt werden.

Eigentlich sollte klar sein: Für Sage 100 Installationen gilt sehr schnell, dass Anwendungsserver, Applikationsserver und SQL-Server unbedingt getrennt und niemals auf einer Maschine gemeinsam installiert gehören (Ausnahmen bestätigen die Regel!).


Weitere Applikationsserver ab einer bestimmten Benutzeranzahl zwingend notwendig

Was in der Praxis jedoch häufig vernachlässigt wird, ist die Tatsache, dass einer bestimmten Anzahl von Benutzern die Konfiguration der Applikationsserver zwingend angepasst gehört und dass ab einer bestimmten Benutzeranzahl auch ein zweiter (oder weitere) Applikationsserver zwingend notwendig werden!

Zitat Sage:

Ein Applikationsserver sollte für die Verwaltung von 30 – 35 Benutzern genutzt werden, da bei mehr Benutzern der Verwaltungsaufwand steigt und dies die Leistung beeinträchtigt. Mit weiteren Applikationsservern kann diese Last verteilt werden und dies beeinflusst dann die Stabilität und Leistung des Sage 100 – Gesamtsystems.

Unsere eigenen Erfahrungen in größeren Kundeninstallationen bestätigen dies 100%.

Die Installation eines weiteren Applikationsservers ist mit den aktuellen Sage 100 Versionen recht einfach. Nach der Installation ist es allerdings wichtig, die Datei "STS_AS_Config.dat" vom Haupt-Applikationsserver in das Installationsverzeichnis der zusätzlichen Applikationsserver zu kopieren.

Außerdem muss man daran denken, mit Administrator-Rechten die Registrierungsinformationen in den neuen Applikationsserver zu importieren. Dafür kann nachfolgende Befehlszeile verwendet werden.

ASADMIN.EXE /command:stsconfig /action:importregistration /file:STS_AS_Config.dat

Inadäquate Konfigurationseinstellungen der Applikationsserver

Sehr häufig finden sich in der Praxis falsch installierte i.S.v. "falsch konfigurierte" Applikationsserver, die in keinster Weise den Anforderungen des Kunden gerecht werden.

In der Konfigurationsdatei der Applikationsserver sollten sowohl die synchronen als auch asynchronen Einstellungen kritisch geprüft werden.

Sage liefert eine Basis-Konfigurationsdatei für den Applikationsserver aus, in der alle wesentlichen Einstellungen kommentiert sind.

Wesentliche Eckpunkte sind:


Max. Anzahl von Isolationsräumen

Definiert die maximale Anzahl von Isolationsräumen (Summe aktiver, inaktiver und im Pool befindlicher Isolationsräume).


Timeout Isolationsraum

Schafft es der Applikationsserver nicht innerhalb dieses Zeitfensters einen Isolationsraum zu finden oder zu erzeugen, wird ein Fehler ausgelöst und im Protokoll ausgegeben.


Initiale Größe des Pools

Gibt die Anzahl der Isolationsräume an, die beim Start des Applikationsservers erzeugt und vorgeladen werden.


Mindestgröße des Pools

Wird dieser Wert durch die Entnahme eines Isolationsraums unterschritten, wird der Pool automatisch wieder auf diesen Wert erhöht.


Maximalgröße des Pools

Definiert die Obergrenze an Isolationsräumen.

Ist der Wert überschritten, werden "abgeräumte" Isolationsräume komplett aus dem System entfernt.


Für einen unserer Kunden, bei dem circa 20-25 Benutzer gleichzeitig/parallel in der Sage 100 arbeiten, hat sich nachfolgende Konfiguration bewährt.


Auszüge Synchrone Isolationsräume:

  <lifetimeManager serviceDomainPollTime="00:01:00" />
  <serviceDomain lifeTimeLeaseTime="04:00:00" lifetimeRenewOnCalltime="04:00:00"
   isolationModel="process" poolInitialSize="20" poolMaxSize="40"
   poolMinSize="2" maxElasticCount="0" contextQuotaMax="4" contextSwitchLevel="2" />

Die Domain-Memory-Größen wurden gegenüber dem Standard leicht herabgesetzt:

<asyncIsolationServer synchronizeContextSwitch="false" synchronizeContextSwitchTimeout="00:00:01"
  maxActiveServiceDomains="0" serviceDomainSynchronizationLockTimeout="00:00:01.5000000"
  maxUseServiceDomains="100" maxServiceDomainMemorySize="150000"

Auszüge Asynchrone Isolationsräume:


Die Werte "lifeTimeLeaseTime" , "lifeTimeRenewOnCalltime", "contextQuotaMax",  

"poolInitialSize" und "poolMaxSize" haben wir für die asynchronen Isolationsräume auf Standard belassen.

<lifetimeManager serviceDomainPollTime="00:01:00" />

  <serviceDomain lifeTimeLeaseTime="04:00:00" lifetimeRenewOnCalltime="04:00:00"

   isolationModel="process" poolInitialSize="5" poolMaxSize="5"

   poolMinSize="1" maxElasticCount="5" contextQuotaMax="4" contextSwitchLevel="2" />
...
</asyncIsolationServer>

Hinweis aus Sage Erklärungen zur Verdopplung des "contextQuotaMax" Werts:

 Die unter den Hardwarevoraussetzungen genannten 300 MB Arbeitsspeicher beziehen sich auf die Einstellung contextQuotaMax des isolationServer (also dem Kern des Applikationsservers). Diese sind im Standard dafür eingerichtet, dass ein Benutzer maximal zwei synchrone Prozesse (parallele Requests) aus dem Control-Center und den Auskünften nutzen darf. Eine Änderung des Wertes z.B. auf vier würde bedingen, dass auch die Berechnung des Arbeitsspeichers neu erfolgen müsste (in diesem Falle müssten 600 MB Arbeitsspeicher pro Benutzer reserviert werden)

Noch SOAP in Verwendung?

Sofern noch SOAP-Services aktiv implementiert sind und genutzt werden, muss man darauf achten, auch für diese SOAP-Services die korrekten Einstellungen in der Konfigurationsdatei der Applikationsserver vorzunehmen!

Sonst laufen die SOAP-Services mit den Default-Einstellungen, die eben kontraproduktiv sein können!



bottom of page