Coredump, bir uygulama çöktüğünde veya beklenmedik şekilde sonlandığında uygulamanın bellek durumunu içeren bir dosyadır. İşletim sistemi, hata ayıklama ve analiz amacıyla bu dosyayı oluşturur. Bu konuda, Elastic Container Instance (ECI) örneği için coredump özelliğinin nasıl etkinleştirileceği açıklanmaktadır. Bu sayede, beklenmedik konteyner sonlandırmalarından kaynaklanan çekirdek dosyalarını analiz ederek sorunun nedenini belirleyebilir ve uygulamayı düzeltebilirsiniz.
Genel bilgiler
Linux'ta bir uygulama beklenmedik şekilde sonlandığında veya çöktüğünde işletim sistemi, uygulamanın bellek durumunu kaydeder ve bir dosyaya yazar. Bu işleme coredump adı verilir. Daha sonra çekirdek dosyasını analiz ederek sorunun nedenini belirleyebilirsiniz.
Aşağıdaki şekilde coredump işlemini tetikleyen Linux sinyalleri gösterilmektedir. Bu sinyaller için varsayılan eylem Core'dur.
Daha fazla bilgi için bkz. coredump dosyası.
Genel bakış
ECI örneğinde aşırı disk kullanımını önlemek ve hizmet kesintilerine yol açmamak için coredump varsayılan olarak devre dışı bırakılır. Coredump özelliğini aşağıdaki yöntemlerden birini kullanarak etkinleştirebilirsiniz:
-
Yöntem 1: Bir coredump O&M görevi etkinleştirin
Coredump özelliğini manuel olarak etkinleştirdiğinizde sistem bir O&M görevi oluşturur. Bir konteyner anormal şekilde sonlandığında veya çıktığında oluşan çekirdek dosyası otomatik olarak OSS'e kaydedilir.
-
Yöntem 2: Çekirdek dosyaları için özel bir kaydetme yolu belirtin
Özel bir kaydetme yolu belirterek çekirdek dosyalarını harici depolamada saklayabilirsiniz. Kaydetme yolunu ayarladıktan sonra coredump otomatik olarak etkinleşir. Bir konteyner çöktüğünde veya beklenmedik şekilde çıktığında oluşan çekirdek dosyası belirtilen yola kaydedilir.
-
Yöntem 1 kullanımı kolaydır ancak zaman ve bölge sınırlamaları vardır. Geçici hata ayıklama ve tanılama senaryoları için uygundur.
Oluşturulan O&M görevi tek seferlik bir görevdir. Bir çekirdek dosyası başarıyla yakalandığında coredump otomatik olarak devre dışı bırakılır. O&M görevi 12 saat boyunca geçerlidir ve bu süre içinde tetiklenmezse süresi dolar.
Bu yöntem aşağıdaki bölgelerde desteklenmez: Çin (Ulanqab), Çin (Heyuan), Çin (Guangzhou), Çin (Nanjing), Filipinler (Manila), Güney Kore (Seul) ve Tayland (Bangkok).
Yöntem 2 harici depolama yapılandırmanızı gerektirir. Uygulamanız kararsızsa çekirdek dosyalarının yakalandığından emin olmak için bu yöntemi kullanabilirsiniz. Ancak hatalı bir uygulama tekrar tekrar yeniden başlatılırsa çok sayıda çekirdek dosyası oluşabilir.
Yöntem 1: Bir coredump O&M görevi etkinleştirin
Konsol
Elastic Container Instance konsoluna giriş yapın.
-
ECI örneği için coredump özelliğini etkinleştirin.
Hedef örneğin ID değerine tıklayarak örnek ayrıntıları sayfasını açın.
-
O&M sekmesine tıklayın, Coredump sekmesini seçin ve ardından Enable seçeneğine tıklayın.
Coredump özelliğini etkinleştirdikten sonra sistem bir O&M görevi oluşturur. Coredump henüz tetiklenmediyse görev durumu Pending olarak görünür.
-
Bir coredump tetikleyin.
ECI örneğine bağlanın. Konteynerde
sleep 100komutunu çalıştırın ve ardından coredump tetiklemek içinCtrl+\tuşlarına basın. Oluşturulan çekirdek dosyası otomatik olarak OSS'e kaydedilir.# sleep 100 ^\Quit (core dumped) -
Çekirdek dosyasını indirin.
Coredump tetiklendikten ve çekirdek dosyası oluşturulduktan sonra O&M görevinin durumu Successful olarak değişir. Çekirdek dosyasını indirmek için Result sütunundaki Download seçeneğine tıklayın.
Notİndirme işlemi başlamazsa tarayıcınızdaki site izin ayarlarını kontrol edin.
API
-
ECI örneği için coredump özelliğini etkinleştirin.
Bir O&M görevi oluşturmak için CreateInstanceOpsTask işlemini çağırın. Hedef ECI örneğini belirtin, OpsType parametresini
coredumpolarak ve OpsValue parametresinienableolarak ayarlayın. Daha fazla bilgi için bkz. CreateInstanceOpsTask.NotECI örneğini belirtirken örnek oluşturma sırasında CorePattern parametresinin ayarlanmadığından emin olun.
-
Bir coredump tetikleyin.
ECI örneğine bağlanın. Konteynerde
sleep 100komutunu çalıştırın ve ardından coredump tetiklemek içinCtrl+\tuşlarına basın. Oluşturulan çekirdek dosyası otomatik olarak OSS'e kaydedilir. -
Çekirdek dosyasını indirin.
O&M görevinin sonucunu görüntülemek için DescribeInstanceOpsRecords işlemini çağırın. Yanıtta ResultContent alanı OSS'teki çekirdek dosyasının URL'sini içerir. Çekirdek dosyasını indirmek için bu URL'ye erişebilirsiniz.
Yöntem 2: Özel bir kaydetme yolu belirtin
Çekirdek dosyaları genellikle çevrimdışı analiz için kullanılır. Bu nedenle, bu dosyaları konteyner içindeki yerel bir yol yerine harici depolamaya kaydetmenizi öneririz. Bu yaklaşım, konteyner çıktığında çekirdek dosyalarının kaybolmasını engeller. ECI, çekirdek dosyaları için özel bir kaydetme yolu belirtmenize olanak tanır. Yolu ayarladıktan sonra coredump otomatik olarak etkinleşir.
Bir ECI örneği oluşturmak için CreateContainerGroup işlemini çağırdığınızda çekirdek dosyalarının kaydedileceği yolu ayarlamak üzere CorePattern parametresini iletebilirsiniz. İlgili parametreler aşağıdaki tabloda açıklanmıştır. Daha fazla bilgi için bkz. CreateContainerGroup.
Birim türünüze göre volume parametrelerini yapılandırın.
|
Parametre |
Tür |
Örnek |
Açıklama |
|
CorePattern |
String |
/data/dump-a/core |
Çekirdek dosyalarının kaydedileceği yol. Bu yol, bağlanmış bir birim içinde olmalıdır. Önemli
Yol boru karakteri ( |
|
Volume.N.Name |
String |
volume1 |
Birim adı. |
|
Volume.N.Type |
String |
NFSVolume |
Birim türü. Bu örnekte NFSVolume kullanılmıştır. |
|
Volume.N.NFSVolume.Path |
String |
/dump |
NFS biriminin yolu. |
|
Volume.N.NFSVolume.Server |
String |
143b24****-gfn3.cn-beijing.nas.aliyuncs.com |
NFS sunucusunun adresi. Alibaba Cloud File Storage NAS kullanıyorsanız bu, NAS dosya sisteminin bağlama noktasının adresidir. |
|
Container.N.VolumeMount.N.Name |
String |
volume1 |
Bağlanacak birimin adı. Bu değer Volume.N.Name değeriyle eşleşmelidir. |
|
Container.N.VolumeMount.N.MountPath |
String |
/data/dump-a/ |
Bağlama yolu. Birim içeriği, konteyner içindeki bağlama yolundaki mevcut tüm içeriğin üzerine yazar. Yolun doğru olduğundan emin olun. |
Aşağıdaki örnekte harici depolama olarak Alibaba Cloud File Storage NAS dosya sisteminin nasıl kullanılacağı gösterilmektedir:
-
A örneği adında bir ECI örneği oluşturun, NAS dosya sistemini bağlayın ve çekirdek dosyaları için kaydetme yolunu ayarlayın.
A örneğini oluşturmak için CreateContainerGroup işlemini çağırın. NAS dosya sistemindeki
/dump/dizinini konteynerdeki/data/dump-a/dizinine bağlamak ve çekirdek dosyası kaydetme yolunu/data/dump-a/coreolarak ayarlamak için aşağıdaki parametreleri belirtin.ContainerGroupName=test-a SecurityGroupId=sg-bp1daxpbz9lzpvvc**** VSwitchId=vsw-bp1gds63lmlm7ib05**** # Declare a volume Volume.1.Name=volume1 Volume.1.Type=NFSVolume Volume.1.NFSVolume.Path=/dump/ Volume.1.NFSVolume.Server=143b24****-gfn3.cn-beijing.nas.aliyuncs.com # Mount the volume to the container Container.1.Name=nginx Container.1.Image=registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=volume1 Container.1.VolumeMount.1.MountPath=/data/dump-a/ # Set the save path for core files CorePattern=/data/dump-a/core -
A örneğinin konteynerindeki herhangi bir dizinde bir coredump tetikleyin.
Konteynerde
sleep 100komutunu çalıştırın ve ardından coredump tetiklemek içinCtrl+\tuşlarına basın. Çekirdek dosyası konteynerdeki/data/dump-a/coreyoluna kaydedilir.# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # cd /data/dump-a/ # ls # sleep 100 ^\Quit (core dumped) # ls core.17 A örneğini serbest bırakın.
-
Aynı NAS dosya sistemini B örneği adlı başka bir ECI örneğine bağlayın.
B örneğini oluşturmak için CreateContainerGroup işlemini çağırın. NAS dosya sisteminin aynı
/dump/dizinini konteynerdeki/data/dump-b/dizinine bağlamak için aşağıdaki parametreleri iletin.ContainerGroupName=test-nas-b SecurityGroupId=sg-bp1daxpbz9lzpvvc**** VSwitchId=vsw-bp1gds63lmlm7ib05**** # Declare a volume Volume.1.Name=volume1 Volume.1.Type=NFSVolume Volume.1.NFSVolume.Path=/dump/ Volume.1.NFSVolume.Server=143b24****-gfn3.cn-beijing.nas.aliyuncs.com # Mount the volume to the container Container.1.Name=nginx Container.1.Image=registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=volume1 Container.1.VolumeMount.1.MountPath=/data/dump-b/ -
B örneğinin konteynerindeki çekirdek dosyasını görüntüleyin.
Çekirdek dosyasını konteynerin
/data/dump-bdizininde görüntüleyebilirsiniz. Çekirdek dosyası harici depolamaya kaydedildiği için A örneği serbest bırakıldıktan sonra kaybolmaz ve analiz için kullanılabilir durumda kalır.# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # cd /data/dump-b/ # ls core.17
SSS
Konsolda Download seçeneğine tıkladığımda indirme işlemi başlamıyor. Ne yapmalıyım?
İndirme işlemi başlamazsa tarayıcınızdaki site izin ayarlarını kontrol edin. Örneğin Chrome'da gerekli izni vermek için aşağıdaki adımları izleyin:
Chrome tarayıcı adres çubuğunun solundaki kilit simgesine tıklayın ve açılan panelde Site settings seçeneğine tıklayın.
Site izinleri listesinde Insecure content öğesini bulun ve iznini Allow olarak ayarlayın.