|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > Netsim System Agent Kurulum ve Yönetim Kılavuzu > 7. Günlük ve tanılama > 7.5 Beklenmeyen hatalar ve yığın derinliği |
Erişim ihlali (ACCESS_VIOLATION), sıfıra bölme, geçersiz komut gibi
işletim sistemi düzeyindeki hatalar süreci düşürmez: ajan bunları yakalayıp
sıradan bir istisnaya çevirir, yığın iziyle günlüğe yazar ve yalnızca o isteği hatayla bitirir.
Windows'ta çeviri iş parçacığı başına kurulur, Linux'ta ayrı bir sinyal yığını üzerindeki sinyal
işleyicileriyle yapılır. Çeviri, belleğini bu iş için ayrılmış ayrı bir “panik”
havuzundan (1 MB) alır; böylece hatanın oluştuğu iş parçacığının elinde tutuyor
olabileceği bir bellek kilidini yeniden beklemez. Havuz DUMPMEMORY çıktısında kendi
satırıyla görünür.
Yığın taşmasını olduktan sonra yakalamak güvenilir değildir (çevirmenin kendisi tükenmiş
yığında koşar), bu yüzden taşmaya hiç varılmaz. Her iş parçacığı açılışında
yığın tabanını ve kullanılabilir sınırını işletim sisteminden okur; özyinelemenin girdiği
yerlerde (ifade derleyicisi, PSQL deyim derleyicisi, çalıştırıcı) ucuz bir eşik denetimi vardır
ve sınır aşılınca STACK_DEPTH_EXCEEDED istisnası yükseltilir — sayısal kod
704, SQLSTATE 54001, mesaj “Stack depth
limit exceeded (… KB used, limit … KB)”.
Sınır, iş parçacığının yığın boyutundan türetilir (pay = boyutun dörtte biri, 64 KB ile 1 MB arasına sıkıştırılır); Windows'un 1 MB'lik varsayılan yığınında 768 KB'dir. Yapılandırmadan ayarlanmaz. Yığın tabanı bilinmeyen iş parçacıklarında (veritabanı sunucusunun çağırdığı UDF iş parçacıkları, işletim sistemi havuz iş parçacıkları) denetim kapalıdır.
Operatör açısından anlamı: sonlanma koşulu olmayan bir PSQL özyinelemesi işçi sürecini sessizce düşürmez; günlüğe açık bir hata satırı bırakır ve istek hatayla döner. İstisnanın PSQL tarafında nasıl yakalandığı IVEDI SQL Kullanıcı Kılavuzu'nun istisna işleme bölümündedir.
[IL] yutulan istisna satırları
Kodda bilerek boş bırakılmış birkaç yakalama bloğu vardır — çoğu günlük yazma yolunun ya da süreç kapanışının içindedir, yani oradan günlüğe yazmak kendi kendini tetiklerdi. Böyle bir blok bir istisnayı yuttuğunda standart hataya tek satırlık bir iz bırakır:
[IL] yutulan istisna: <yer>
Bu satır günlük dosyasına yazılmaz. Konsol/uygulama kipinde (-A)
görünür; hizmet kipinde standart hata kapalı olduğu için kaybolur. Aynı yerin tekrar tekrar görünmesi gerçek bir sorunun işaretidir.