هناك عدد قليل من الأسباب، بخلاف وجود خطأ، لجعل الموقع بطيئًا: أحدها هو الزيادة التدريجية في عدد المستخدمين، ونشاط المستخدمين، وحجم قاعدة البيانات؛ والآخر هو أن Discourse يزداد حجمًا مع تطوره، ويضيف ميزات، ويحدث مكونات البرامج.
ولكن من الجدير مراقبة الاستجابة، وما إذا كانت الآلة الحالية بالحجم المناسب.
(على سبيل المثال، لاحظت أن أرخص آلة لدى Hetzner تحتوي الآن على 4 جيجابايت من ذاكرة الوصول العشوائي، بنفس السعر الذي كانت عليه الآلة الأرخص غير المتوفرة الآن والتي تحتوي على 2 جيجابايت من ذاكرة الوصول العشوائي. لا يزال أحد مواقعي يعمل على الحجم الأقدم بسعة 2 جيجابايت.)
للتسجيل، نظرًا لأنني كنت أتابع استخدام موقعي الرئيسي، فقد تم نقله مؤخرًا والخادم جديد وتمت إعادة تشغيله حديثًا، سأدرج بعض النتائج. إنها كمية كبيرة من البيانات - لا تتردد في عدم دراستها!
الحالة الحالية للآلة هي
# 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
لاحظت أنه عند تسجيل الدخول، تعلن الآلة
Memory usage: 45%
وهو ما يعكس بشكل وثيق عمود “used” (المستخدم)، وليس عمود “free” (المتاح).
لقد كنت آخذ قراءات دورية من الأوامر التالية
date
uptime
free
ps aux|sort -n +5|tail
vmstat 5 5
وما رأيته هو أن الذاكرة “المتاحة” تم استبدالها بذاكرة “buffer” (مخزن مؤقت) و “cache” (ذاكرة تخزين مؤقت)، دون زيادة بصمة ذاكرة الوصول العشوائي للعمليات (RSS). أعتقد أن هذا يوضح لماذا ليس من الجيد تتبع الذاكرة “المتاحة”، حتى لو جعل بعض مزودي الاستضافة هذا الأمر سهلاً. أعتقد أيضًا أنه يوضح، في هذه الحالة، عدم وجود تسرب في الذاكرة.
بعد فترة وجيزة من إعادة التشغيل، أرى هذا:
# free
total used free shared buff/cache available
Mem: 3905344 1560508 996400 179712 1348436 1974692
Swap: 4194288 0 4194288
وبعد فترة وجيزة
# 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
ترى أن sidekiq (435 ميجابايت) والـ unicorns (330-350 لكل منها) هي أكبر العمليات.
بمرور الوقت، تنخفض الذاكرة المتاحة ثم استخدام ذاكرة sidekiq (RSS)، ويفترض أن ذلك بسبب تبديلها إلى القرص، دون تأثير غير مرغوب فيه - الآلة لا تظهر أي نشاط تبديل إلى القرص. لصالح زيادة مساحة المخزن المؤقت والذاكرة المؤقتة، أعتقد.
# 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
بعد حوالي 14 ساعة:
# 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
لاحقًا…
# 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
لاحقًا…
# 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
لاحقًا
# 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
لاحقًا
# 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
لاحقًا
# 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