7.5 Beklenmeyen hatalar ve yığın derinliği

<< İç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ı yakalanmaz, önlenir

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.

Standart hataya düşen [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.