Quelques raisons, autres qu’un bug, pour qu’un site devienne lent : l’une est une augmentation progressive des utilisateurs, de l’activité des utilisateurs, de la taille de la base de données ; l’autre est que Discourse devient de plus en plus grand à mesure qu’il se développe, ajoute des fonctionnalités, met à jour des composants logiciels.
Mais il est utile de garder un œil sur la réactivité et sur la bonne dimension de la machine actuelle.
(Soit dit en passant, je remarque que la machine la moins chère de Hetzner dispose désormais de 4 Go de RAM, au même prix que la machine la moins chère désormais indisponible qui dispose de 2 Go de RAM. L’un de mes sites fonctionne toujours sur l’ancienne taille de 2 Go.)
Pour mémoire, comme j’ai suivi l’utilisation de mon site principal, puisqu’il a été récemment migré et que le serveur est neuf et fraîchement redémarré, j’inclurai quelques observations. C’est beaucoup de données - n’hésitez pas à ne pas les étudier !
L’état actuel de la machine est
# uptime
13:55:23 up 4 days, 21:10, 1 user, load average: 0.07, 0.08, 0.02
# free
total used free shared buff/cache available
Mem: 3905344 1638012 98492 481864 2168840 1595004
Swap: 4194288 252928 3941360
Je remarque qu’à la connexion, la machine annonce
Memory usage: 45%
ce qui reflète le plus étroitement la colonne ‘used’, pas la colonne ‘free’.
J’ai pris des relevés périodiques des commandes suivantes
date
uptime
free
ps aux|sort -n +5|tail
vmstat 5 5
et ce que j’ai vu, c’est que la mémoire ‘free’ a été échangée contre la mémoire ‘buffer’ et ‘cache’, sans que l’empreinte RAM des processus (RSS) n’augmente. Je pense que cela montre pourquoi il n’est pas idéal de suivre la mémoire ‘free’, même si certains fournisseurs d’hébergement le facilitent. Je pense que cela montre aussi, dans ce cas, aucune fuite de mémoire.
Peu de temps après le redémarrage, je vois ceci :
# free
total used free shared buff/cache available
Mem: 3905344 1560508 996400 179712 1348436 1974692
Swap: 4194288 0 4194288
et peu de temps après
# ps aux|sort -n +5|tail
...
1000 1688 0.1 6.5 1006548 256428 ? Sl 16:44 0:10 unicorn master -E production -c config/unicorn.conf.rb
1000 2189 0.1 8.5 5657760 333248 ? Sl 16:45 0:06 unicorn worker[3] -E production -c config/unicorn.conf.rb
1000 2113 0.1 8.5 5656608 334352 ? Sl 16:45 0:07 unicorn worker[2] -E production -c config/unicorn.conf.rb
1000 2044 0.4 8.7 6052196 342380 ? Sl 16:44 0:23 unicorn worker[1] -E production -c config/unicorn.conf.rb
1000 2006 1.7 9.0 5628640 352492 ? Sl 16:44 1:33 unicorn worker[0] -E production -c config/unicorn.conf.rb
1000 1971 3.1 11.1 6033652 435388 ? SNl 16:44 2:54 sidekiq 6.5.12 discourse [0 of 5 busy]
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 0 866112 314288 1083816 0 0 32 28 484 621 4 1 95 0 0
Vous voyez que sidekiq (435 Mo) et les unicorns (330-350 chacun) sont les plus gros processus.
Au fil du temps, la RAM libre puis l’utilisation de la RAM de sidekiq (RSS) diminuent, probablement en raison de la pagination, sans effet indésirable - la machine ne montre aucune activité de pagination. En faveur d’un espace tampon et cache accru, je pense.
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 0 679764 326988 1190840 0 0 0 11 285 396 1 1 98 0 0
Environ 14 heures plus tard :
# uptime
10:12:06 up 17:27, 1 user, load average: 0.04, 0.02, 0.00
# ps aux|sort -n +5|tail
...
1000 2006 1.2 9.6 5647908 377424 ? Sl Sep05 12:42 unicorn worker[0] -E production -c config/unicorn.conf.rb
1000 1971 1.8 11.3 6431988 444184 ? SNl Sep05 18:51 sidekiq 6.5.12 discourse [0 of 5 busy]
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 2048 199972 342480 1576156 0 0 0 17 361 511 2 2 96 0 0
Plus tard…
# uptime
19:52:00 up 1 day, 3:07, 1 user, load average: 0.02, 0.06, 0.01
# ps aux|sort -n +5|tail
...
1000 2006 1.2 9.8 5654308 382944 ? Sl Sep05 20:44 unicorn worker[0] -E production -c config/unicorn.conf.rb
1000 1971 1.5 11.1 6431668 436340 ? SNl Sep05 25:04 sidekiq 6.5.12 discourse [0 of 5 busy]
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 2304 103356 301632 1690136 0 0 0 10 360 511 1 1 98 0 0
Plus tard…
# uptime
12:13:09 up 1 day, 19:28, 2 users, load average: 0.05, 0.06, 0.01
# ps aux|sort -n +5|tail
...
1000 2006 1.2 9.1 5654820 358612 ? Sl Sep05 31:47 unicorn worker[0] -E production -c config/unicorn.conf.rb
1000 1971 1.3 10.0 6431668 393584 ? SNl Sep05 35:08 sidekiq 6.5.12 discourse [0 of 5 busy]
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 284416 281596 77904 1908528 0 0 0 38 315 450 1 1 98 0 0
Plus tard
# uptime
13:26:42 up 2 days, 20:42, 1 user, load average: 0.20, 0.06, 0.02
# ps aux|sort -n +5|tail
...
1000 2006 1.2 9.3 5789072 365720 ? Sl Sep05 51:54 unicorn worker[0] -E production -c config/unicorn.conf.rb
1000 1971 1.2 10.0 6433332 393472 ? SNl Sep05 50:44 sidekiq 6.5.12 discourse [0 of 5 busy]
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 242944 82016 95188 2082180 0 0 0 131 332 488 1 1 98 0 0
Plus tard
# uptime
09:21:33 up 3 days, 16:36, 1 user, load average: 0.13, 0.10, 0.03
# free
total used free shared buff/cache available
Mem: 3905344 1618936 323032 476664 1963376 1619208
Swap: 4194288 250112 3944176
# ps aux|sort -n +5|tail
...
1000 2006 1.2 9.3 5789200 363572 ? Sl Sep05 67:02 unicorn worker[0] -E production -c config/unicorn.conf.rb
1000 1971 1.1 9.6 6433652 377472 ? SNl Sep05 63:14 sidekiq 6.5.12 discourse [0 of 5 busy]
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
0 0 250112 321888 56052 1906672 0 0 2 13 293 420 1 0 99 0 0
Plus tard
# uptime
13:55:23 up 4 days, 21:10, 1 user, load average: 0.07, 0.08, 0.02
# free
total used free shared buff/cache available
Mem: 3905344 1638012 98492 481864 2168840 1595004
Swap: 4194288 252928 3941360
# ps aux|sort -n +5|tail
...
1000 1971 1.1 9.5 6434676 371648 ? SNl Sep05 80:49 sidekiq 6.5.12 discourse [0 of 5 busy]
1000 2006 1.2 9.5 5658468 373404 ? Sl Sep05 88:44 unicorn worker[0] -E production -c config/unicorn.conf.rb
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r b swpd free buff cache si so bi bo in cs us sy id wa st
...
1 0 252928 101040 86736 2082372 0 0 0 10 333 482 1 0 99 0 0