Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] Lenteur interface websympa

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Sylvain Amrani <adresse@cachée>
  • To: adresse@cachée
  • Subject: Re: [sympa-fr] Lenteur interface websympa
  • Date: Thu, 02 Jun 2005 17:58:12 +0200

Sylvain Amrani wrote:
Olivier Salaün - CRU wrote:

On a optimisé la commande lists dans la branche de développement en développant l'utilisation du cache en mémoire. Au lieu d'effectuer plusieurs requêtes pour chaque liste (pour déterminer les privilèges de l'abonné), on en fait 2 au démarage de wwsympa.


J'ai fusionné les diffs avec mon code issu de stable. On arrive maintenant à faire plusieurs choses en même temps. Cependant ça reste extremement lent. Pour faire une recherche, par exemple, je continue à faire :
- 1 List::get_lists()
- 1 new List() par liste
- 1 List::load() par List::new() qui fera lui-même 2 stat() (donc pas de cache disque)

Avec 4700 listes, une recherche sur 3 caractères qui me renvoie 63 listes prend 4 secondes sur un serveur Xeon avec 3 Go de RAM

Si je stresse un peu (à la main, pas même avec ab), j'obtiens des erreurs 500 d'idle timeout à 30s.

Bon, j'ai testé un peu plus sérieusement avec DProf et je vous joins les résultats.

Il apparait qu'on est extremement pénalisé lorsqu'on navigue authentifié. Par exemple, l'affichage de la page d'accueil (non modifiée) 100 fois pour quelqu'un qui est abonné à 13 listes prend 4m10s mais seulement 38s quand on est anonyme.

Regardez la différence entre les do_home authentifiés et les do_home anonymes : on lance 300 fois get_which qui est *extremement* gourmant

Le chargement du CGI fait 4473 List::load, ce qui dont est le nombre de listes.
Si on fait juste après 10 do_home authentifiés et quelques clics, on obtient 148124 List::load, propulsé en top 2 du palmarès.

On fait 100 do_search_list et on a la première place 632000 appels, mais surtout un temps cumulé très impressionnant.

Les fonctions gourmandes semblent être load(), get_lists et get_which()

Le cache que vous avez implémenté améliore bien les choses. Mais je me demande encore quelle interface utiliser, et pourquoi pas modifier les fonction de màj des listes pour tenir à jour une table SQL pour y effectuer les recherches.

Sylvain.
chargement du fcgi :
--------------------
Total Elapsed Time = -4.78100 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 11.67 34.946 4773 0.0024 0.0073 List::_load_admin_file
0.00 6.677 10.105 114568 0.0001 0.0001 List::_load_scenario
0.00 6.381 7.030 753974 0.0000 0.0000 Log::do_log
0.00 6.298 14.490 114568 0.0001 0.0001 List::_load_scenario_file
0.00 5.102 23.237 348302 0.0000 0.0001 List::_load_list_param
0.00 1.565 6.956 19088 0.0001 0.0004 List::get_first_admin_user
0.00 1.310 1.310 19092 0.0001 0.0001 DBI::st::execute
0.00 0.897 10.157 4772 0.0002 0.0021 List::sync_include_admin
0.00 0.855 0.873 4772 0.0002 0.0002 List::_save_stats_file
0.00 0.850 1.666 33437 0.0000 0.0000 DBI::st::fetchrow_hashref
0.00 0.703 37.602 4773 0.0001 0.0079 List::load
0.00 0.600 0.600 19088 0.0000 0.0000 DBI::db::ping
0.00 0.533 0.533 33439 0.0000 0.0000 DBI::common::FETCH
0.00 0.512 0.512 76352 0.0000 0.0000 DBI::db::quote
0.00 0.461 0.932 19097 0.0000 0.0000 DBI::_new_handle

+10 do_home authentifiés + 1 recherche + 1 ouverture
---------------------------
Total Elapsed Time = -6.94942 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 11.96 35.155 4774 0.0025 0.0074 List::_load_admin_file
0.00 11.64 49.897 148124 0.0001 0.0003 List::load
0.00 8.377 9.055 104187 0.0000 0.0000 Log::do_log
0.00 6.828 15.150 114628 0.0001 0.0001 List::_load_scenario_file
0.00 6.647 10.345 114628 0.0001 0.0001 List::_load_scenario
0.00 4.602 23.157 348395 0.0000 0.0001 List::_load_list_param
0.00 3.099 66.749 148124 0.0000 0.0005 List::new
0.00 2.170 2.170 31 0.0700 0.0700 List::get_lists
0.00 1.425 1.425 210484 0.0000 0.0000 Conf::get_robot_conf
0.00 1.298 20.361 30 0.0433 0.6787 List::get_which
0.00 1.220 1.220 19190 0.0001 0.0001 DBI::st::execute
0.00 1.215 6.306 19096 0.0001 0.0003 List::get_first_admin_user
0.00 1.017 9.677 4774 0.0002 0.0020 List::sync_include_admin
0.00 0.855 0.933 4774 0.0002 0.0002 List::_save_stats_file
0.00 0.719 1.385 34091 0.0000 0.0000 DBI::st::fetchrow_hashref

+100 do_search_list
------------------------------------------
Total Elapsed Time = -15.0153 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 40.69 83.233 623800 0.0001 0.0001 List::load
0.00 17.36 18.072 206480 0.0000 0.0000 Log::do_log
0.00 13.45 117.61 623800 0.0000 0.0002 List::new
0.00 12.08 35.475 4774 0.0025 0.0074 List::_load_admin_file
0.00 8.870 8.879 124 0.0715 0.0716 List::get_lists
0.00 7.640 10.397 442 0.0173 0.0235 Template::Parser::_parse
0.00 6.987 10.555 114622 0.0001 0.0001 List::_load_scenario
0.00 6.418 15.190 114622 0.0001 0.0001 List::_load_scenario_file
0.00 4.782 23.357 348395 0.0000 0.0001 List::_load_list_param
0.00 4.186 4.186 688777 0.0000 0.0000 Conf::get_robot_conf
0.00 3.288 63.576 100 0.0329 0.6358 main::do_search_list
0.00 1.630 1.630 19573 0.0001 0.0001 DBI::st::execute
0.00 1.281 2.211 442 0.0029 0.0050 Template::Parser::split_text
0.00 1.270 1.270 441 0.0029 0.0029 Template::Document::new
0.00 1.164 6.686 19100 0.0001 0.0004 List::get_first_admin_user

+100 do_home authentifies = real 4m10.150s
---------------------------------------------------------------------
Total Elapsed Time = -23.7865 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 108.6 156.77 143827 0.0001 0.0001 List::load
0.00 31.33 32.120 363090 0.0000 0.0000 Log::do_log
0.00 29.63 220.04 143827 0.0000 0.0002 List::new
0.00 21.44 21.437 301 0.0712 0.0712 List::get_lists
0.00 14.06 205.26 300 0.0469 0.6842 List::get_which
0.00 12.07 34.715 4774 0.0025 0.0073 List::_load_admin_file
0.00 7.938 7.938 150306 0.0000 0.0000 Conf::get_robot_conf
0.00 6.771 9.197 596 0.0114 0.0154 Template::Parser::_parse
0.00 6.366 9.564 114808 0.0001 0.0001 List::_load_scenario
0.00 6.238 14.199 114808 0.0001 0.0001 List::_load_scenario_file
0.00 4.882 22.547 348395 0.0000 0.0001 List::_load_list_param
0.00 2.450 2.450 100 0.0245 0.0245 List::init_list_cache
0.00 1.820 1.820 20000 0.0001 0.0001 DBI::st::execute
0.00 1.435 7.186 19096 0.0001 0.0004 List::get_first_admin_user
0.00 1.270 1.270 595 0.0021 0.0021 Template::Document::new

+100 do_home anonymes = real 0m38.092s
------------------------------------------------------
Total Elapsed Time = -7.15844 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 13.01 35.355 4774 0.0027 0.0074 List::_load_admin_file
0.00 8.347 11.231 700 0.0119 0.0160 Template::Parser::_parse
0.00 6.827 7.496 761108 0.0000 0.0000 Log::do_log
0.00 6.068 13.820 114608 0.0001 0.0001 List::_load_scenario_file
0.00 5.857 9.305 114608 0.0001 0.0001 List::_load_scenario
0.00 4.862 22.287 348395 0.0000 0.0001 List::_load_list_param
0.00 1.420 1.420 19500 0.0001 0.0001 DBI::st::execute
0.00 1.410 1.410 699 0.0020 0.0020 Template::Document::new
0.00 1.386 2.372 700 0.0020 0.0034 Template::Parser::split_text
0.00 1.241 2.668 315413 0.0000 0.0000 Template::Grammar::__ANON__
0.00 1.215 6.796 19096 0.0001 0.0004 List::get_first_admin_user
0.00 1.077 10.287 4774 0.0002 0.0022 List::sync_include_admin
0.00 0.975 1.608 36751 0.0000 0.0000 DBI::st::fetchrow_hashref
0.00 0.965 1.003 4774 0.0002 0.0002 List::_save_stats_file
0.00 0.928 0.938 43700 0.0000 0.0000
Template::Parser::tokenise_directi
ve



Archives gérées par MHonArc 2.6.19+.

Haut de le page