Node.js uygulamalarınız zamanla yavaşlıyor ve aniden çöküyor mu? Bu durum genellikle iyi yönetilmeyen bir bellek sızıntısından (memory leak) kaynaklanır. Bu rehberde performans darboğazlarını nasıl tespit edip çözeceğinizi anlatıyoruz.
Event Loop Blocklanmasını Engellemek
Node.js tek iş parçacıklı (single-threaded) bir yapıya sahiptir. Eğer senkron ve ağır CPU işlemleri yaparsanız, Event Loop bloke olur ve uygulamanız diğer isteklere yanıt veremez. Ağır işlemler için Worker Threads veya harici kuyruk sistemleri (RabbitMQ, Redis) kullanmalısınız.
// (c) CodeMareFi - codemarefi.com.tr
// Ağır matematiksel işlemleri ana thread'de YAPMAYIN!
const { Worker } = require('worker_threads');
function runHeavyTask(workerData) {
return new Promise((resolve, reject) => {
const worker = new Worker('./heavy-task-worker.js', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`));
});
});
}
Memory Leak Nasıl Tespit Edilir?
Bellek sızıntılarını bulmak için Node.js'in sunduğu Inspector profilini veya harici APM (Application Performance Monitoring) araçlarını kullanabilirsiniz. Özellikle "global değişkenlerde" tutulan ve asla silinmeyen büyük objeler, en yaygın sızıntı sebeplerinden biridir.
