Zum Hauptinhalt springen

In diesem Blog werde ich darauf eingehen, wie man feststellt, ob genügend osl_server_processes gestartet sind; in einem zukünftigen Blog wird besprochen, wie man feststellt, ob der max_open_servers-Wert für Ihre Umgebung korrekt ist.

Die Anzahl der OSL-Server ist ein wichtiger Faktor für die Leistung von Anwendungen, die OSL verwenden!

Was bedeutet es, genügend osl_server Prozesse laufen zu haben? Es bedeutet, dass, wenn eine Transaktion von einem anderen Modul oder System ankommt, immer ein osl_server im Leerlauf ist und zur Verfügung steht, um diese Transaktion zu verarbeiten. Das bedeutet, dass es nie eine Zeit geben sollte, in der alle osl_server-Prozesse Transaktionen verarbeiten.

Die osl_server-Prozesse werden nach dem Prinzip "last in first out" eingeplant, d.h. der letzte osl_server-Prozess, der eine Transaktion abschließt, ist der nächste, der eingeplant wird. Das bedeutet, dass der früheste time_last_run der letzte Zeitpunkt ist, an dem alle Server gleichzeitig beschäftigt waren. Wenn der Zeitpunkt in den letzten ein oder zwei Tagen lag, brauchen Sie wahrscheinlich mehr Server. Liegt der Zeitpunkt beim Hochfahren des Systems, brauchen Sie wahrscheinlich keine. Alles, was in der Mitte liegt, ist eine Ermessensentscheidung, die davon abhängt, wie lange der Zeitpunkt zurückliegt und ob Sie damit leben können, dass OSL ab und zu langsamer wird. Abbildung 1 zeigt die Befehle, die benötigt werden, um die time_last_run für mehrere osl_server Prozesse anzuzeigen.

as: process -Prozessname osl_server1; match time_last_run; dump_pte
Nicht laufenden Prozess verwenden.
Aktueller Prozess ist 52, ptep 8D82E500, Overseer.System (osl_server1)
PTE bei 8D82E500 für Overseer.System (osl_server1)
time_last_run:          00000000 01834C2E(09-07-20 15:36:51.31266)
as: process -process_name osl_server2; match time_last_run; dump_pte
Nicht laufenden Prozess verwenden.
Aktueller Prozess ist 53, ptep 8D872000, Overseer.System (osl_server2)
PTE bei 8D872000 für Overseer.System (osl_server2)
time_last_run:          00000002 462972DC(09-07-22 08:54:17.46376)
as: process -process_name osl_server3; match time_last_run; dump_pte
Nicht laufenden Prozess verwenden.
Aktueller Prozess ist 54, ptep 8D874000, Overseer.System (osl_server3)
PTE bei 8D874000 für Overseer.System (osl_server3)
time_last_run:          00000000 0183947E(09-07-20 15:36:51.59513)
. . . .
as: process -process_name osl_server6; match time_last_run; dump_pte
Nicht laufenden Prozess verwenden.
Aktueller Prozess ist 57, ptep 8D87B440, Overseer.System (osl_server6)
PTE bei 8D87B440 für Overseer.System (osl_server6)
time_last_run:          00000000 01DBF96A(09-07-20 15:38:19.98936)
as:
Abbildung 1 - Anzeige von time_last_run

Das Makro osl_server_times.cm am Ende dieses Beitrags erzeugt eine Datei namens osl_server_times.(date), die eine sortierte Liste der time_last_run Zeiten enthält. Es zeigt die Datei auch im Terminalfenster an. Es wird angenommen, dass die osl_server Prozesse osl_serverN heißen. Falls nicht, können Sie Ihren eigenen Basisnamen angeben. Es wird davon ausgegangen, dass die Prozesse alle einen gemeinsamen Basisnamen haben, auf den sie abgestimmt sind. Der erste angegebene Zeitpunkt ist der letzte Zeitpunkt, an dem alle Server gleichzeitig liefen. Die Anmeldezeit gibt an, wann der Prozess gestartet wurde; in der Regel werden sie auch zur gleichen Zeit gestartet, nämlich beim Hochfahren des Systems.

Beispiel 1 zeigt ein Modul mit 6 laufenden osl_server-Prozessen. Alle 6 Prozesse wurden seit dem Hochfahren des Systems genutzt, aber basierend auf der letzten Laufzeit hatte dies wahrscheinlich etwas mit der Wiederherstellung während des Bootens zu tun. Nur zwei Prozesse wurden in den zwei Tagen seit dem Hochfahren des Systems benutzt. Wenn es kein Problem mit der Zeit gibt, die das System braucht, um zu booten und neue Transaktionen zu verarbeiten, würde ich keine weiteren Prozesse zu diesem Modul hinzufügen.

osl_server_times.cm ausgeführt auf %phx_vos#m16 am 09-07-22.15:27:10

      time_last_run CPU-Anmeldezeit Prozess
                                                       Name Nummer
 09-07-20 15:36:51.31266 / 0.87 / 09-07-20 15:33:49 / osl_server1 / 52
 09-07-20 15:36:51.31484 / 1.32 / 09-07-20 15:33:50 / osl_server5 / 56
 09-07-20 15:36:51.59513 / 0.81 / 09-07-20 15:33:49 / osl_server3 / 54
 09-07-20 15:38:19.98936 / 2.51 / 09-07-20 15:33:50 / osl_server6 / 57
 09-07-22 08:54:17.46376 / 1.59 / 09-07-20 15:33:49 / osl_server2 / 53
 09-07-22 15:26:35.14511 / 2.77 / 09-07-20 15:33:49 / osl_server4 / 55
Beispiel 1 - alle Prozesse haben etwas CPU-Zeit, aber es besteht keine Notwendigkeit, mehr hinzuzufügen

In Beispiel 2 laufen auf dem Modul 40 osl_server-Prozesse. 13 davon sind seit dem Booten des Moduls vor über 7 Monaten nicht mehr gelaufen, so dass auch hier viele Prozesse laufen.

osl_server_times.cm ausgeführt am %XXXXX#m1 am 11-03-21.15:33:01

      time_last_run CPU-Anmeldezeit Prozess
                                                       Name Nummer
 10-08-01 07:45:02.68817 / 0.02 / 10-08-01 07:45:02 / osl_server1 / 84
 10-08-01 07:45:06.45556 / 0.00 / 10-08-01 07:45:06 / osl_server2 / 85
 10-08-01 07:45:10.47752 / 0.00 / 10-08-01 07:45:10 / osl_server3 / 86
 10-08-01 07:45:14.51074 / 0.00 / 10-08-01 07:45:14 / osl_server4 / 87
 10-08-01 07:45:18.53199 / 0.00 / 10-08-01 07:45:18 / osl_server5 / 89
 10-08-01 07:45:22.62286 / 0.01 / 10-08-01 07:45:22 / osl_server6 / 92
 10-08-01 07:45:26.67370 / 0.01 / 10-08-01 07:45:26 / osl_server7 / 93
 10-08-01 07:45:30.70518 / 0.00 / 10-08-01 07:45:30 / osl_server8 / 94
 10-08-01 07:45:38.26467 / 0.02 / 10-08-01 07:45:34 / osl_server9 / 95
 10-08-01 07:45:38.77099 / 0.01 / 10-08-01 07:45:38 / osl_server10 / 96
 10-08-01 07:45:42.80245 / 0.01 / 10-08-01 07:45:42 / osl_server11 / 97
 10-08-01 07:45:46.82534 / 0.00 / 10-08-01 07:45:46 / osl_server12 / 98
 10-08-01 07:45:50.85063 / 0.00 / 10-08-01 07:45:50 / osl_server13 / 99
 11-03-18 14:33:15.59938 / 9514.24 / 10-08-01 07:46:15 / osl_server19 / 105
 11-03-18 14:43:22.17904 / 30208.59 / 10-08-01 07:46:19 / osl_server20 / 106
 11-03-18 14:45:00.93608 / 19494.54 / 10-08-01 07:45:58 / osl_server15 / 101
 11-03-18 19:29:54.04067 / 37248.83 / 10-08-01 07:46:55 / osl_server25 / 111
 11-03-20 00:19:10.75480 / 28961.64 / 10-08-01 07:46:10 / osl_server18 / 104
 11-03-20 04:13:02.01803 / 667.23 / 10-08-01 07:45:54 / osl_server14 / 100
 11-03-20 07:51:16.66950 / 40151.59 / 10-08-01 07:46:51 / osl_server24 / 110
 11-03-20 08:10:21.71397 / 16944.88 / 10-08-01 07:46:02 / osl_server16 / 102
 11-03-20 08:12:03.16114 / 39066.37 / 10-08-01 07:46:23 / osl_server21 / 107
 11-03-20 08:12:56.92729 / 37474.92 / 10-08-01 07:46:31 / osl_server23 / 109
 11-03-20 08:12:56.94239 / 6425.76 / 10-08-01 07:46:06 / osl_server17 / 103
 11-03-20 08:12:59.07991 / 33316.21 / 10-08-01 07:46:27 / osl_server22 / 108
 11-03-20 08:13:03.05792 / 0.02 / 11-03-20 08:12:59 / osl_server26 / 2317
 11-03-20 08:13:16.25518 / 0.02 / 11-03-20 08:13:06 / osl_server28 / 2319
 11-03-20 08:13:16.25527 / 0.01 / 11-03-20 08:13:03 / osl_server27 / 2318
 11-03-20 08:13:21.60688 / 0.02 / 11-03-20 08:13:16 / osl_server30 / 2321
 11-03-20 08:19:09.81250 / 0.15 / 11-03-20 08:13:20 / osl_server31 / 2322
 11-03-20 08:50:04.73651 / 0.45 / 11-03-20 08:13:30 / osl_server33 / 2324
 11-03-20 21:02:34.17459 / 68.30 / 11-03-20 08:50:49 / osl_server39 / 2406
 11-03-21 15:20:20.30186 / 170.07 / 11-03-20 08:50:55 / osl_server40 / 2407
 11-03-21 15:32:56.10295 / 211.96 / 11-03-20 08:50:45 / osl_server38 / 2405
 11-03-21 15:32:56.10362 / 124.29 / 11-03-20 08:13:10 / osl_server29 / 2320
 11-03-21 15:32:59.99746 / 202.52 / 11-03-20 08:13:24 / osl_server32 / 2323
 11-03-21 15:33:01.02978 / 175.24 / 11-03-20 08:13:37 / osl_server35 / 2326
 11-03-21 15:33:01.35322 / 211.63 / 11-03-20 08:13:33 / osl_server34 / 2325
 21.03.11 15:33:01.38417 / 201.76 / 20.03.11 08:50:38 / osl_server36 / 2403
 11-03-21 15:33:01.46699 / 194.44 / 11-03-20 08:50:41 / osl_server37 / 2404
Beispiel 2 - einige Prozesse sind seit dem Booten nicht mehr gelaufen, keine Notwendigkeit, weitere hinzuzufügen

Dieses letzte Beispiel zeigt einen Fall, in dem mehr osl_servers benötigt werden. Das Modul betreibt 20 Server und alle 20 waren weniger als 24 Stunden ab dem Zeitpunkt der Ausführung des Makros in Betrieb.

osl_server_times.cm ausgeführt am %XXXXX#m11 am 11-03-21.15:49:03

      time_last_run CPU-Anmeldezeit Prozess
                                                       Name Nummer
 11-03-20 18:37:18.97851 / 3079.12 / 10-09-10 08:04:38 / osl_server / 56
 11-03-20 18:37:18.97999 / 5044.43 / 10-09-10 08:04:37 / osl_server / 48
 11-03-20 18:37:22.37568 / 2485.06 / 10-09-10 08:04:37 / osl_server / 51
 11-03-20 18:37:26.99446 / 3637.60 / 10-09-10 08:04:37 / osl_server / 52
 11-03-20 18:37:26.99464 / 3329.56 / 10-09-10 08:04:38 / osl_server / 62
 11-03-20 18:38:04.86495 / 3556.72 / 10-09-10 08:04:37 / osl_server / 54
 11-03-20 18:38:48.53218 / 2509.57 / 10-09-10 08:04:38 / osl_server / 63
 11-03-20 18:39:06.44256 / 3434.27 / 10-09-10 08:04:39 / osl_server / 67
 11-03-20 18:39:06.44291 / 4478.29 / 10-09-10 08:04:38 / osl_server / 64
 11-03-20 18:39:06.45211 / 2918.82 / 10-09-10 08:04:37 / osl_server / 49
 11-03-20 18:39:06.45213 / 3131.79 / 10-09-10 08:04:37 / osl_server / 53
 11-03-21 03:00:35.69830 / 2477.28 / 10-09-10 08:04:38 / osl_server / 58
 11-03-21 03:00:35.74118 / 3411.54 / 10-09-10 08:04:38 / osl_server / 59
 11-03-21 03:00:36.86657 / 3225.85 / 10-09-10 08:04:38 / osl_server / 61
 11-03-21 12:14:28.10003 / 2897.49 / 10-09-10 08:04:38 / osl_server / 60
 11-03-21 12:14:28.10185 / 3983.01 / 10-09-10 08:04:38 / osl_server / 57
 11-03-21 15:07:43.19355 / 2736.61 / 10-09-10 08:04:37 / osl_server / 50
 11-03-21 15:12:11.08222 / 2892.31 / 10-09-10 08:04:38 / osl_server / 66
 11-03-21 15:12:13.61254 / 4489.65 / 10-09-10 08:04:38 / osl_server / 65
 11-03-21 15:48:52.71038 / 3601.19 / 10-09-10 08:04:38 / osl_server / 55
Beispiel 3 - ein Fall, in dem mehr Server benötigt werden

Sie können die Anzahl der OSL-Server erhöhen (oder verringern), indem Sie zwei Konfigurationsdateien bearbeiten, kompilieren und installieren. Diese Änderungen werden beim nächsten Neustart übernommen. Die Abstimmungsparameter, die die Anzahl der OSL-Server steuern, sind der Wert max_open_servers in den Dateien new_modules.tin und new_backbone_systems.tin. Das Modul_start_up verwendet den Wert max_open_servers, um die Anzahl der zu startenden osl_server-Prozesse zu berechnen. Wenn das Modul kein Brückenmodul ist, startet es 2 * max_open_servers; wenn es ein Brückenmodul ist, startet es 4 * max_open_servers.

Durch Setzen des ADDITIONAL_OSL_SERVERS Wertes in module_start_up.cm können Sie mehr osl_server Prozesse starten als den Standardwert 2 oder 4 mal max_open_servers. Sie können auch einfach mehr Prozesse von der Kommandozeile aus starten, ohne neu zu booten. Das Makro start_more_osl_servers.cm, ebenfalls am Ende dieses Beitrags, macht das Starten weiterer Prozesse einfach.

Wenn Sie zu viele osl_server-Prozesse laufen haben, können Sie diese stoppen, aber dann sind sie nicht mehr da, wenn Sie sie einmal brauchen. Im Allgemeinen verbraucht die Ausführung zusätzlicher osl_server-Prozesse keine nennenswerte Menge an Ressourcen. Wenn Sie jedoch zusätzliche Prozesse stoppen wollen, sollten Sie nicht den Befehl stop_process verwenden. Der osl_server-Prozess hat einen Schalter, der ihm sagt, dass er sich nach Beendigung der aktuellen Transaktion ordnungsgemäß beenden soll. Der Schalter mit dem Namen stop_sw ist ein Kurzzeichen und sollte auf -1 gesetzt werden, siehe Abbildung 2.

as: Prozess -Prozessname osl_server1
Nicht laufenden Prozess verwenden.
Aktueller Prozess ist 52, ptep 8D82E500, Overseer.System (osl_server1)
as: set_word stop_sw -1
adr von bis
000730F4 0000 FFFF
as:
Abbildung 2 - Anhalten eines osl_server-Prozesses

Da der Prozess erst nach Beendigung der aktuellen Transaktion beendet wird, sollte er in dem zuletzt ausgeführten Prozess eingestellt werden.

& osl_server_times starts here
&
& osl_server_times.cm
& version 1.0 09-07-10
& version 1.1 09-07-17 check to make sure that the data is on the
&                      expected line of output, if not adjust down 1 line
&                      and correct parsing for process name
& version 1.2 09-07-20 added a parameter for matching the osl_server
&                      process name instead of assuming that the name
&                      will be osl_server
& version 1.3 10-06-23 added &echo so macro can be used as started
&                      process. Note be sure that the name of the started
&                      process does not match the name of the osl_server
&                      processes or macro will abort. For example,
&                      osl_serverN for the osl_server processes and
&                      osl_server_times for the process running this
&                      macro will cause the macro to abort.
& version 1.4 11-03-21 cleaned up some comments prior to publication
&
& Noah Davids Stratus CAC noah.davids@stratus.com
&
&
&begin_parameters
MATCH match_name:string,required,=osl_server
&end_parameters
&
&
&echo no_input_lines no_command_lines no_macro_lines
&
&set_string PD (process_dir)
&set_string PL &PD&>process_list
&set_string LR &PD&>last_run
&set_string LI &PD&>login
&set_string CPU &PD&>cpu
&
&set_string TABLE &PD&>osl_server_times
&
&
& Create a new file or write over an existing file
attach_default_output &TABLE&
detach_default_output
&
&
&attach_input
analyze_system
&
&
& build a file containing a list of all the osl_server processes
..attach_default_output &PL&
match &MATCH&; who
..detach_default_output
&
&
& The first line has an "as: " prompt before the output which has to be
& stripped. Also the process name is name is in () which gives the
& command processor problems since it thinks it is a command function
& so translate the ()s to []. Finally translate spaces to underscores so
& I don't have to keep using the quote command function.
&set LINECOUNT 1
&set_string LINE &+
   (ltrim (substr (translate &+
      (contents &PL& &LINECOUNT& -hold) '[]' '()') 4))
&set_string LINE (translate (quote &LINE&) '_' ' ')
&
&
& LOOP until we hit a line that is just the as: prompt
&while X&LINE&X ^= Xas:X
&
&
& The first space will delimit the process number
&set I (calc (index &LINE& '_') - 1)
&set PROCESS (substr &LINE& 1 &I&)
&
&
& Look for the [] characters, everything between them is the process name
&set I (calc (index &LINE& '[') + 1)
&set J (calc (index &LINE& ']') - &I&)
&set_string NAME (substr &LINE& &I& &J&)
&
&
& create a temporary file and put the output of the analyze_system
& request dump_pte in it. We match on time_last_run so there is only a
& few lines in the output file
..attach_default_output &LR&&PROCESS&
process &PROCESS&
match 'time_last_run' ; dump_pte
..detach_default_output
&
&
..attach_default_output &LI&&PROCESS&
match 'login' ; dump_pte
..detach_default_output
&
&
..attach_default_output &CPU&&PROCESS&
match 'cpu_time:' ; dump_pte
..detach_default_output
&
&
& The time is in line 4. Even though the time is in ()s we don't have
& to translate because we are going to extract out the time before the
& command processor has a chance to get confused
&if (substr (contents &LR&&PROCESS& 4) 2 4) = 'time'
&then &set_string LRTIME (substr (contents &LR&&PROCESS& 4) 45 23)
&else &do
&set_string LRTIME (substr (contents &LR&&PROCESS& 5) 45 23)
..display_line
..display_line process &PROCESS& last run shifted by 1 line
&end
&
&
& Now get the login time
&if (substr (contents &LI&&PROCESS& 2) 2 5) = 'login'
&then &set_string LITIME (substr (contents &LI&&PROCESS& 2) 36 17)
&else &do
&set_string LITIME (substr (contents &LI&&PROCESS& 3) 36 17)
..display_line
..display_line process &PROCESS& login time shifted by 1 line
&end
&
&
& Finally get the CPU time
&if (substr (contents &CPU&&PROCESS& 2) 2 3) = 'cpu'
&then &set_string CPUTIME (translate &+
        (contents &CPU&&PROCESS& 2) '[]' '()')
&else &do
&set_string CPUTIME (translate &+
        (contents &CPU&&PROCESS& 3) '[]' '()')
..display_line
..display_line process &PROCESS& cpu time shiffed by 1 line
&end
&set_string CPUTIME (translate (quote &CPUTIME&) '_' ' ')
&set I (calc (index &CPUTIME& '[') + 1)
&set_string CPUTIME (substr &CPUTIME& &I&)
&set I (calc (index &CPUTIME& '_') - 1)
&set_string CPUTIME (substr &CPUTIME& 1 &I&)
&
&
& Now add a line to our table time - process name - process number
..attach_default_output &TABLE& -append
..display_line &LRTIME& / &CPUTIME& / &LITIME& / &NAME& / &PROCESS&
..detach_default_output
&
&
& increment the line count, read another line from the process list and
& translate the ()'s and spaces
&set LINECOUNT (calc &LINECOUNT& + 1)
&set_string LINE (translate (contents &PL& &LINECOUNT& -hold) '[]' '()')
&set_string LINE (translate (quote &LINE&) '_' ' ')
&end
&
&
& exit analyze_system
quit
&
&
& The table has a bunch of lines that are nothing but as: prompts. The
& sort -duplicate_path gets rid of all but the first as: line and also
& sorts the rest of the lines so that the process last run longest ago
& is first.
sort &TABLE& -duplicates_path &PD&>extra
&
&
& use line_edit to remove the as: prompt from the table and also add
& column headers
&set_string H &+
   osl_server_times.cm run on (current_module) at (date).(time)
&attach_input
line_edit &TABLE& -no_keystrokes -no_backup -no_verbose
insert
         &H&

      time_last_run        CPU       login time           process
                                                       name    number
.
change * !as:  ! ! *
write
quit
&detach_input
&
&
& copy the table out of the process_dir and into the current dir.
&set_string DT (date)
copy_file &TABLE& osl_server_times.&DT& -delete
display_file osl_server_times.&DT&
&
& osl_server_times ends here
Abbildung 3 - osl_server_times.cm
& start_more_osl_servers starts here
&
& start_more_osl_servers.cm
& version 1.0 09-07-21
&
& Noah Davids Stratus CAC noah.davids@stratus.com
&
&
&begin_parameters
BASE base_name:string,required,=osl_server
START starting_index:number,required
END   ending_index:number,required
&end_parameters
&
&
&  ********** If this is a bridge module, the -super switch should be
&  ********** given to each osl_server process.
&  ********** Redirect the output of the osl_admin request to a temp file
&
attach_default_output (process_dir)>foo
osl_admin -quit -request_line 'get i_am_bridge'
&set bridge (command_status)
detach_default_output
&
&if &bridge& ^= 0
&then &set OPTS (string -super -syserr)
&else &set OPTS (string -syserr)
&
&
&  **********  Use a loop to start the desired number of servers.
&
&set COUNT &START&
&label LOOP
&
&set OUT &BASE&&COUNT&.out
&set CMD (string osl_server &$OPTS& -server_suffix &COUNT&)
&
&
&  ********** If it exists, save the old output file.
&
&if (exists &OUT&) ^= 0
&then !rename -delete &OUT& *.old
&
&
&  ********** Create a new output file and turn on implicit locking. This
&  ********** will allow the file to be displayed while the osl_server is
&  ********** still running.
&
!create_file &OUT&
!set_implicit_locking &OUT& on
!start_process &$CMD& -privileged -output_path &OUT& -priority 9 &+
   -process_name &BASE&&COUNT&
&
&
&  ********** Loop back around until enough osl_server processes have
&  ********** been started.
&
&set COUNT &COUNT& + 1
&
&if &COUNT& <= &END&
&then &goto LOOP
&
&
& start_more_osl_servers ends here
Abbildung 4 - start_more_osl_servers.cm

 

© 2020 Stratus Technologies.