Next.js uygulamalarında memory leak tespiti ve memory profiling için geliştirilmiş bir araç.
npm install nextjs-memory-profiler
Next.js uygulamanızda memory leak tespiti için iki farklı yaklaşım kullanabilirsiniz:
middleware.ts
dosyanızda:
import MemoryProfiler from 'nextjs-memory-profiler';
const profiler = new MemoryProfiler({
threshold: 50, // 50MB üzeri artışlarda uyarı ver
});
// Profiler'ı başlat
profiler.start();
export function middleware(request) {
// Route profiling başlat
const routeProfiler = profiler.startRouteProfiler(request.nextUrl.pathname);
// Response tamamlandığında
request.nextUrl.searchParams.forEach(() => {
// Profiling'i sonlandır
routeProfiler.end();
});
}
Herhangi bir page component'inizde:
'use client';
import { useEffect } from 'react';
import MemoryProfiler from 'nextjs-memory-profiler';
const profiler = new MemoryProfiler({
threshold: 50
});
export default function Page({ params }) {
useEffect(() => {
// Route profiling başlat
const routeProfiler = profiler.startRouteProfiler(`/pages/${params.slug}`);
// Component unmount olduğunda profiling'i sonlandır
return () => {
routeProfiler.end();
};
}, [params.slug]);
return <div>{/* Sayfa içeriği */}</div>;
}
Profiler iki tür çıktı üretir:
-
memory-profile.log:
- Anlık uyarılar
- Memory leak tespitleri
- Yüksek memory kullanım uyarıları
-
memory-report.json:
- Route bazlı analiz
- Memory kullanım trendleri
- Her route için:
- Toplam istek sayısı
- Ortalama memory kullanımı
- İşlem süreleri
- Memory artış/azalış trendi
const profiler = new MemoryProfiler({
interval: 5000, // Memory ölçüm aralığı (ms)
threshold: 50 // Memory leak uyarı eşiği (MB)
});
Seçenek | Açıklama | Varsayılan |
---|---|---|
interval | Ölçüm aralığı (ms) | 5000 |
threshold | Memory artış eşiği (MB) | 100 |
Profiler şu durumlarda uyarı verir:
-
Route Bazlı Memory Leak:
- Aynı route'a yapılan ardışık isteklerde memory kullanımı eşik değerini aşarsa
-
Genel Memory Kullanımı:
- Toplam heap kullanımı limit değerinin %80'ini aşarsa
- Belirli bir süre içinde anormal memory artışı tespit edilirse
Her route için şu metrikler izlenir:
- Memory kullanımı (MB)
- İşlem süresi (ms)
- Memory kullanım trendi
- Maksimum ve minimum memory kullanımı
-
Server-Side Kullanım:
- Bu paket sadece server-side'da çalışır
- Client-side'da kullanılırsa uyarı verir ve işlem yapmaz
-
Otomatik Temizlik:
- Uygulama kapatıldığında (SIGINT/SIGTERM) profiler otomatik olarak durur
- Son rapor otomatik olarak oluşturulur
-
Hata Yönetimi:
- Tüm kritik operasyonlar try-catch ile korunur
- Hata durumunda uygun fallback değerler kullanılır
Memory leak tespit edildiğinde:
-
memory-profile.log
dosyasını kontrol edin - Hangi route'da leak tespit edildiğini belirleyin
- İlgili route'un component'lerini ve data fetching logic'ini gözden geçirin
- Memory-report.json'daki trend analizini inceleyin
MIT