Kebocoran dan fragmentasi sumber daya dan / atau memori adalah masalah umum di semua bahasa pemrograman. Tidak masalah apakah ada pengumpul sampah di sana atau tidak, bahasa yang dikompilasi atau diinterpretasikan. Ruby tidak terkecuali, dan hari ini kita akan berbicara sedikit tentang masalah ini, opsi untuk menyelesaikannya, dan bahkan menulis masalah kita sendiri.
Masalahnya bisa dan memang muncul ketika kita memiliki proses yang berjalan lama dan melakukan banyak pekerjaan berbeda. Sebagian besar masalah ini terkait dengan kesalahan dalam kode, di mana kode terus menjalankan fungsi bisnisnya dengan benar. Mereka tidak selalu mudah ditemukan dan diperbaiki. Tetapi fragmentasi memori menunggu kita sedikit dari sisi lain, dan bahkan kode yang benar secara bertahap dapat mengakumulasi memori yang terfragmentasi. Dalam dunia Rails, proses yang termasuk dalam kategori "bermain lama" sebenarnya adalah server web dan berbagai latar belakang manajemen / tugas tertunda -β DelayedJob
, Sidekiq
dll. Itu tentang mereka dan kemudian kita akan membicarakannya ..
Server web
ββ . /, (puma, unicorn), Phusion Passenger . ββ -, Rails-. , :
https://about.gitlab.com/blog/2015/06/05/how-gitlab-uses-unicorn-and-unicorn-worker-killer/
https://github.com/schneems/puma_worker_killer
https://docs.gitlab.com/ee/administration/operations/sidekiq_memory_killer.html
, ββ βββ . βββ βββ. βββ Passenger Enterprise .
- , DelayedJob
, ActiveJob
( β β ). βββ βββ . Sidekiq
, DelayedJob
!
- DelayedJob
WorkerKiller
βββ!
?
middleware
, , .
CPU, . βββ , , , β"βββ Limiter
.
βββ Killer
. unicornβ
ββ SIGTERM. βββ , Passenger Master Process . , , βinflightβ . , :
passenger-config detach-process <PID>
, 500 , 100. Passenger βββ -, , .
!
-, , , - DelayedJob
. , , .
!
? WorkerKiller ? , . βββ , , , . βββ , .
, :
-
-
-
Cara menghitung memori di Linux β- hanya untuk pria sejati
Pembunuh unicorn β- dia yang pertama!
-