Passer au contenu principal

Dans ce blog, j'aborderai la question de savoir comment déterminer si suffisamment de processus osl_server_processus sont lancés ; dans un prochain blog, je discuterai de la manière de déterminer si la valeur max_open_servers est correcte pour votre environnement.

Le nombre de serveurs OSL est un facteur déterminant pour les performances des applications qui utilisent OSL !

Que signifie « avoir suffisamment de processus osl_server en cours d'exécution » ? Cela signifie que lorsqu'une transaction arrive d'un autre module ou système, il y a toujours un osl_server inactif et disponible pour traiter cette transaction. Cela signifie qu'il ne devrait jamais y avoir de moment où tous les processus osl_server traitent des transactions.

Les processus osl_server sont planifiés selon le principe « dernier entré, premier sorti », de sorte que le dernier processus osl_server à avoir terminé une transaction est le prochain à être planifié. Cela signifie que le time_last_run le plus ancien correspond à la dernière fois où tous les serveurs étaient occupés simultanément. Si cette date remonte à un ou deux jours, vous avez probablement besoin de serveurs supplémentaires. Si cette date correspond au démarrage du système, ce n'est probablement pas le cas. Tout ce qui se trouve entre les deux relève d'une décision subjective basée sur la durée écoulée depuis cette heure et sur votre capacité à accepter des ralentissements occasionnels de l'OSL. La figure 1 montre les commandes nécessaires pour afficher le time_last_run de plusieurs processus osl_server.

comme :  processus -nom_du_processus osl_server1 ; correspond à time_last_run ;dump_pte
Utilisation d'un processus non exécuté.
Le processus actuel est 52, ptep 8D82E500, Overseer.System (osl_server1)
PTE à 8D82E500 pour 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
Utilisation d'un processus non exécuté.
Le processus actuel est 53, ptep 8D872000, Overseer.System (osl_server2)
PTE à 8D872000 pour Overseer.System (osl_server2)
time_last_run :          00000002 462972DC (09-07-22 08:54:17.46376)
as :  processus -nom_du_processus osl_server3 ; correspond à time_last_run ;dump_pte
Utilisation d'un processus non exécuté.
Le processus actuel est 54, ptep 8D874000, Overseer.System (osl_server3)
PTE à 8D874000 pour 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
Utilisation d'un processus non exécuté.
Le processus actuel est 57, ptep 8D87B440, Overseer.System (osl_server6)
PTE à 8D87B440 pour Overseer.System (osl_server6)
time_last_run :          00000000 01DBF96A (09-07-20 15:38:19.98936)
comme :
Figure 1 – affichage de time_last_run

La macro osl_server_times.cm à la fin de cet article crée un fichier nommé osl_server_times.(date) contenant une liste triée des heures time_last_run. Elle affiche également le fichier dans la fenêtre du terminal. Elle suppose que les processus osl_server sont nommés osl_serverN. Si ce n'est pas le cas, vous pouvez fournir votre propre nom de base. Elle suppose que tous les processus ont un nom de base commun, qui est celui qu'elle recherche. La première heure indiquée est la dernière fois que tous les serveurs ont fonctionné simultanément. L'heure de connexion vous indique quand le processus a été lancé ; en général, ils sont également lancés en même temps, c'est-à-dire au démarrage du système.

L'exemple 1 montre un module avec 6 processus osl_server en cours d'exécution. Les 6 ont été utilisés depuis le démarrage du système, mais d'après la dernière durée d'exécution, cela était probablement lié à la récupération lors du démarrage. Seuls deux processus ont été utilisés au cours des deux jours qui ont suivi le démarrage du système. À moins qu'il y ait un problème avec le temps nécessaire au système pour démarrer et être prêt à traiter de nouvelles transactions, je n'ajouterais pas d'autres processus à ce module.

osl_server_times.cm exécuté sur %phx_vos#m16 le 09-07-22 à 15:27:10

      time_last_run        CPU       heure de connexion           processus                                                       nom    numéro                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
 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
Exemple 1 – tous les processus ont un certain temps CPU, mais il n'est pas nécessaire d'en ajouter davantage.

Dans l'exemple 2, le module exécute 40 processus osl_server. 13 n'ont pas été exécutés depuis le démarrage du module il y a plus de 7 mois, donc là encore, ils ont beaucoup de processus en cours d'exécution.

osl_server_times.cm exécuté sur %XXXXX#m1 le 21/03/11 à 15:33:01

      time_last_run        CPU       heure de connexion           processus
                                                       nom    numéro
 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
 11-03-21 15:33:01.38417 / 201,76 / 11-03-20 08:50:38 / osl_server36 / 2403
 11-03-21 15:33:01.46699 / 194,44 / 11-03-20 08:50:41 / osl_server37 / 2404
Exemple 2 – certains processus ne s'exécutent pas depuis le démarrage, inutile d'en ajouter d'autres

Ce dernier exemple montre un cas où davantage de serveurs osl_servers sont nécessaires. Le module exécute 20 serveurs et les 20 étaient utilisés moins de 24 heures après l'exécution de la macro.

osl_server_times.cm exécuté sur %XXXXX#m11 le 21/03/11 à 15:49:03

      time_last_run        CPU       heure de connexion           processus                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 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
 21/03/11 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
Exemple 3 – un cas où davantage de serveurs sont nécessaires

Vous pouvez augmenter (ou diminuer) le nombre de serveurs OSL en modifiant, compilant et installant deux fichiers de configuration. Ces modifications seront effectives au prochain redémarrage. Les paramètres de réglage qui contrôlent le nombre de serveurs OSL sont la valeur max_open_servers dans les fichiers new_modules.tin et new_backbone_systems.tin. Le module_start_up utilise la valeur max_open_servers pour calculer le nombre de processus osl_server à démarrer. Si le module n'est pas un module pont, il démarre 2 * max_open_servers ; s'il s'agit d'un module pont, il démarre 4 * max_open_servers.

En définissant la valeur ADDITIONAL_OSL_SERVERS dans module_start_up.cm, vous pouvez démarrer davantage de processus osl_server que la valeur par défaut 2 ou 4 fois max_open_servers. Vous pouvez également démarrer davantage de processus à partir de la ligne de commande sans redémarrer. La macro start_more_osl_servers.cm, également disponible à la fin de cet article, facilite le démarrage de davantage de processus.

Si trop de processus osl_server sont en cours d'exécution, vous pouvez les arrêter, mais ils ne seront alors plus disponibles si vous en avez besoin. En général, l'exécution de processus osl_server supplémentaires n'utilise pas une quantité importante de ressources. Cependant, si vous souhaitez arrêter les processus supplémentaires, vous ne devez pas utiliser la commande stop_process. Le processus osl_server dispose d'un commutateur qui lui indique de se terminer correctement après avoir terminé la transaction en cours. Le commutateur, nommé stop_sw, est un raccourci et doit être réglé sur -1, voir figure 2.

comme :  process -process_name osl_server1
Utilisation d'un processus non exécuté.
Le processus actuel est 52, ptep 8D82E500, Overseer.System (osl_server1)
comme :  set_word stop_sw -1
addr      from  to
000730F4  0000  FFFF
comme :
Figure 2 – Arrêt d'un processus osl_server

Étant donné que le processus ne se termine qu'une fois la transaction en cours terminée, il doit être défini dans le processus qui a été exécuté en dernier.

& 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 [email protected]
&
&
&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
Figure 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 [email protected]
&
&
&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
Figure 4 – start_more_osl_servers.cm