Java sorun giderme aracı listesi

Linux komut sınıfı

kuyruk

En sık kullanılan kuyruk -f

tail -300f shopbase.log # 300 satırı geri alın ve gerçek zamanlı izleme dosyası yazma moduna girin

grep

grep forest f.txt #Dosya arama grep orman f.txt cpf.txt # Çoklu dosya arama grep'log '/ home / admin -r -n # cat f.txt dizinindeki anahtar kelimelerle eşleşen tüm dosyaları bul cat f.txt | grep -i shopbase grep'shopbase '/ home / admin -r -n --include *. {vm, java} # Grep'shopbase' / home / admin -r -n --exclude *. {vm, java} # dosya sonekini belirtin Eşleşmeyi önleme seq 10 | grep 5 -A 3 #Up eşleştirme seq 10 | grep 5 -B 3 # Aşağı eşleştirme seq 10 | grep 5 -C 3 # Yukarı ve aşağı eşleştirme, genellikle bu kediyi kullanın f.txt | grep -c 'MAĞAZA'

awk

1 Temel komutlar

awk '{baskı $ 4, $ 6}' f.txtawk '{baskı NR, $ 0}' f.txt cpf.txt awk '{baskı FNR, $ 0}' f.txt cpf.txtawk '{baskı FNR, FILENAME, $ 0} 'f.txt cpf.txtawk' {print FILENAME, "NR =" NR, "FNR =" FNR, "$" NF "=" $ NF} 'f.txt cpf.txtecho 1: 2: 3: 4 | awk -F: '{baskı $ 1, $ 2, $ 3, $ 4}'

2 maç

awk '/ ldb / {print}' f.txt #match ldbawk '! / ldb / {print}' f.txt # ldbawk '/ ldb / / LISTEN / {print}' f.txt #match ldb ve LISTENawk ile eşleşmiyor '$ 5 ~ / ldb / {print}' f.txt # Beşinci sütun ldb ile eşleşiyor

3 Yerleşik değişkenler

NR: NR, awk çalıştırıldıktan sonra kayıt ayırıcısına göre okunan veri sayısını temsil eder. Varsayılan kayıt ayırıcı bir satırsonu karakteridir, bu nedenle varsayılan, okunan veri satırlarının sayısıdır. NR, Kayıt Numarası kısaltması olarak anlaşılabilir.

FNR: awk birden çok girdi dosyasını işlediğinde, ilk dosyayı işledikten sonra, NR 1'den başlamaz, ancak birikmeye devam eder, bu nedenle FNR görünür.Yeni bir dosya işlendiğinde, FNR Sadece 1'den saymaya başlayın, FNR Kayıt Dosya Numarası olarak anlaşılabilir.

NF: NF, geçerli kayda bölünen alanların sayısını temsil eder ve NF, Alan Sayısı olarak anlaşılabilir.

bulmak

sudo -u admin find / home / admin / tmp / usr -name \ *. log (birden fazla dizinde bulun) find.-iname \ *. txt (hem büyük hem de küçük harflerle eşleşir) find.-yazın d (mevcut dizinde Tüm alt dizinler) find / usr -type l (geçerli dizindeki tüm sembolik bağlantılar) find / usr -type l -name "z *" -ls (sembolik bağlantıların ayrıntıları örneğin: inode, dizin) find / home / admin -size + 250000k (250000k'yi aşan dosyalar elbette + şu değerden küçüktür) find / home / admin f -perm 777 -exec ls -l {} \; (izinlere göre dosyaları kontrol et) find / home / admin -atime -1 Bir gün içinde erişilen dosyalar find / home / admin -ctime -1 Durumu bir gün içinde değişen dosyalar bul / home / admin -mtime -1 Bir gün içinde değiştirilen dosyalar find / home / admin -amin -11 dakika Find / home / admin -cmin -1 içinde erişilen dosyalar 1 dakika içinde durumu değişen dosyalar find / home / admin -mmin -11 dakika içinde değiştirilen dosyalar

pgm

Toplu sorgu vm-shopbase günlükleri karşılama koşulları

pgm -A -f vm-shopbase'cat /home/admin/shopbase/logs/shopbase.log.2017-01-17|grep 2069861630 '

çar

çar, şirketimizin kendi toplama aracıdır. Kullanımı çok kolay, geçmişte toplanan veriler diskte saklanıyor, bu nedenle geçmiş sistem verilerini hızlı bir şekilde sorguluyoruz. Elbette gerçek zamanlı başvuru durumu da sorgulanabilir. Çoğu makineye kurulur.

çar ### Son günün göstergelerini görüntüleyebilirsiniz

tsar --live ### gerçek zamanlı göstergeleri görüntüleyebilir, varsayılan değer beş saniyedir

tsar -d 20161218 ### Belirli bir günün verilerini görüntülemek için belirtin, en fazla dört aylık verilerin görüntülenebileceği anlaşılıyor

tsar --memtsar --loadtsar --cpu ### Elbette bu, belirli bir günde tek bir göstergenin durumunu sorgulamak için -d parametresiyle de kullanılabilir.

üst

Bazı temel bilgilere bakmanın yanı sıra, geri kalanı çeşitli vm sorunlarını sorgulamak için işbirliği yapmaktır.

ps -ef | grep javatop -H -p pid

İş parçacığının ondalık sayılarını ondalık sayıya getirdikten sonra, jstack iş parçacığının ne yaptığını görmeye gidecek

diğer

netstat -nat | awk '{print $ 6}' | sort | uniq -c | sort -rn # Mevcut bağlantıyı kontrol edin, aşağıdaki gibi yüksek close_wait durumuna dikkat edin

Algılama aracı

Btrace

İlk söylenecek btrace. Üretim ortamında önceden sorun giderme için gerçekten büyük bir katildir. Giriş hakkında hiçbir şey söylemeyeceğim. Doğrudan kod köküne gidin

  • ArrayList'in add yöntemini kimin çağırdığını kontrol edin ve yalnızca mevcut ArrayList'in boyutu 500'den büyük olan evrelerin çağrı yığınını yazdırın

    @OnMethod (clazz = "java.util.ArrayList", method = "add", location = @Location (value = Kind.CALL, clazz = "/.*/", method = "/.*/"))public statik void m (@ProbeClassName String probeClass, @ProbeMethodName String probeMethod, @TargetInstance Object instance, @TargetMethodOrField String method) {if (getInt (field ("java.util.ArrayList", "size"), örnek) > 479) {println ("ArrayList.add yöntemini kontrol edin:" + probeClass + "#" + probeMethod + ", yöntem:" + yöntem + ", boyut:" + getInt (alan ("java.util.ArrayList", " size "), örnek)); jstack (); println (); println (" =========================== "); println ();})
  • Mevcut servis yöntemi çağrıldığında döndürülen değeri ve istenen parametreleri izleyin

    @OnMethod (clazz = "com.taobao.sellerhome.transfer.biz.impl.C2CApplyerServiceImpl", method = "nav", location = @Location (value = Kind.RETURN)) public static void mt (long userId, int current, int ilişki, Dize kontrolü, String redirectUrl, @Return AnyType sonucu) {println ("parameter # userId:" + userId + ", current:" + current + ", ilişki:" + ilişki + ", kontrol:" + kontrol + ", redirectUrl:" + redirectUrl + ", sonuç:" + sonuç);}
  • Diğer işlevsel grupların bazı araçları az ya da çok mevcut, bu yüzden bunun hakkında konuşmayacağım. Eğer ilgileniyorsanız, lütfen hareket edin. https://github.com/btraceio/btrace

    Not:

  • Gözlemden sonra, 1.3.9'un yayın çıkışı kararsız ve doğru sonucu görmek için birkaç tetikleyici daha gerekiyor

  • Normal ifade izleme sınıfıyla eşleştiğinde aralık kontrol edilmelidir, aksi takdirde uygulamanın tam CPU nedeniyle takılma olasılığı çok yüksektir.

  • Bayt kodu enjeksiyonunun prensibi olduğundan, uygulamanın normale dönmesini istiyorsanız uygulamayı yeniden başlatmanız gerekir.

  • Griler

    Grays, @ 'ın başyapıtıdır. Birkaç harika özellik hakkında konuşun (bazı özellikler btrace ile örtüşür):

    sc -df xxx : Kaynak kod konumu ve sınıf yükleyici yapısı dahil olmak üzere geçerli sınıfın çıktı ayrıntıları

    izleme sınıfı yöntemi : Bu özelliği gerçekten çok beğendim! Bu özelliği JProfiler'da uzun zaman önce görebilirsiniz. Her yönteme bölünmüş olarak, geçerli yöntem çağrısının zaman alıcıını yazdırın. Yöntem performansını giderirken çok yardımcı oluyor.Örneğin, önceki makalemde trace komutunu kullandım:

    Diğer işlevsel parçalar btrace ile örtüşür ve seçilebilir.İlgileniyorsanız lütfen taşıyın.

    Ayrıca ilgili arthas, Grays'a dayanıyor, eğer ilgileniyorsanız, adresine gidin. = a1z9z.8109794.header.32.1lsoMc

    javOSize

    Sadece bir işlevi söyle sınıflar : Bayt kodunu değiştirerek ve sınıf içeriğini değiştirerek, hemen etkili olacaktır. Böylece çıktıyı görmek için hızlıca bir yere giriş yapabilirsiniz Dezavantajı, koda çok müdahaleci olmasıdır. Ama ne yaptığınızı biliyorsanız, bu gerçekten iyi bir şeydir.

    Diğer işlevler Griler ve btrace, bırakın kolayca yapılabilir.

    Http://www.atatech.org/articles/38546'dan önce yazdığım javOSize'nin tanıtımına göz atabilirsiniz. Lütfen resmi web sitesine gidin.

    JProfiler

    Eskiden JProfiler aracılığıyla birçok sorunu değerlendirirdim, ancak şimdi Griler ve btrace temelde çözülebilir. Ek olarak, sorun temelde üretim ortamıdır (ağ izolasyonu), bu nedenle temelde kullanılmaz, ancak yine de işaretlemek gerekir. Lütfen resmi web sitesine gidin https://www.ej-technologies.com/products/jprofiler/overview.html

    Büyük katil

    EclipseMAT

    Tutulma için eklenti olarak kullanılabilir veya ayrı bir program olarak açılabilir. Ayrıntılar için lütfen adresini ziyaret edin.

    zprofiler

    Grup içindeki gelişme herkes tarafından bilinmelidir. Özetle: zprofiler ile paspaslamak için neye ihtiyacınız var? Ayrıntılar için lütfen zprofiler.alibaba-inc.com adresini ziyaret edin

    java üç eksen, oh hayır, yedi

    jps

    Sadece bir komut kullanıyorum:

    sudo -u admin / opt / taobao / java / bin / jps -mlvV

    jstack

    Genel kullanım:

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jstack 2815

    yerel + java yığını:

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jstack -m 2815

    jinfo

    Sistem başlatma parametrelerini aşağıdaki gibi görebilirsiniz.

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jinfo -flags 2815

    jmap

    İki kullanım

    1. Yığını kontrol edin

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jmap -heap 2815

    2. boşaltma

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jmap -dump: canlı, format = b, dosya = / tmp / heap2.bin 2815

    veya

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jmap -dump: format = b, dosya = / tmp / heap3.bin 2815

    3. Yığını kimin işgal ettiğine bakın zprofiler ve btrace ile sorunların giderilmesi bir kaplan kadar güçlüdür

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jmap -histo 2815 | kafa -10

    jstat

    Birçok jstat parametresi var, ancak biri yeterli

    sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jstat -gcutil 28151000

    jdb

    Günümüzde jdb de sıklıkla kullanılmaktadır. Jdb, ön hata ayıklamak için kullanılabilir, önceden teslim edilen java_home'unuzun / opt / taobao / java / olduğunu ve uzaktan hata ayıklama bağlantı noktasının 8000 olduğunu varsayalım. sudo -u admin / opt / taobao / java / bin / jdb -attach 8000 .

    Yukarıdaki, jdb'nin başarıyla başladığı anlamına gelir. Daha sonra hata ayıklama için kesme noktaları ayarlayabilirsiniz. Spesifik parametreler resmi oracle talimatlarında bulunabilir

    CHLSDB

    CHLSDB, birçok durumda daha ilginç şeyler görebileceğinizi düşünüyor, bu yüzden ayrıntılara girmeyeceğim. Jstack ve jmap gibi araçların buna dayandığını duydum.

    sudo -u admin / opt / taobao / java / bin / java -classpath /opt/taobao/java/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB

    Daha fazla ayrıntı için R büyük gönderiye bakın

    intellij fikir eklentisi

    anahtar destekleyici

    Kısayol tuşunu bir kez hatırlayamazsınız, ancak her zaman birkaç kez hatırlayabilirsiniz, değil mi?

    maven yardımcısı

    Maven bağımlılıklarını analiz etmek için iyi bir yardımcı.

    VM seçenekleri

  • Sınıfınız hangi dosyadan yüklendi?

    -XX: + TraceClassLoading results like
  • Uygulama çıktı döküm dosyasını askıya alıyor

    -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = / home / admin / logs / java.hprof group temelde vm parametresinde bu seçeneğe sahiptir
  • jar paketi çakışması

    Bunu büyük bir başlık olarak yazmak çok fazla değil mi? Herkes bu sinir bozucu olayla az ya da çok ilgilenmiştir. Aşağıda pek çok planım var, inanmazsan üstesinden gelemem.

    mvn bağımlılığı: ağaç > ~ / bağımlılık.txt

    Tüm bağımlılıkları vurun

    mvn bağımlılığı: ağaç -Dverbose -Dincludes = groupId: artifactId

    Yalnızca belirtilen groupId ve artifactId bağımlılıklarını yazın

    -XX: + TraceClassLoading

    Vm başlangıç komut dosyası eklendi. Yüklenen sınıfın ayrıntılı bilgileri tomcat başlangıç komut dosyasında görülebilir.

    -verbose

    Vm başlangıç komut dosyası eklendi. Yüklenen sınıfın ayrıntılı bilgileri tomcat başlangıç komut dosyasında görülebilir.

    griler: sc

    Grilerin sc komutu, geçerli sınıfın nereden yüklendiğini de açıkça görebilir

    tomcat-classloader-locate

    Aşağıdaki URL, mevcut sınıfın nereden yüklendiğini bilmek için kullanılabilir curl http: // localhost: 8006 / classloader / locate? class = org.apache.xerces.xs.XSObject

    ALI-TOMCAT tarafından bize getirilen sürpriz (teşekkürler @ )

    Kap tarafından yüklenen akü listesini listeleyin

    curl http: // localhost: 8006 / classloader / jars

    Geçerli sınıf tarafından şu anda yüklenen gerçek jar paketi konumunu listeleyin, sınıf çatışmalarını çözerken yararlıdır

    curl http: // localhost: 8006 / classloader / locate? class = org.apache.xerces.xs.XSObject

    diğer

    gpref

    dmesg

    Java işleminizin sessizce kaybolduğunu ve neredeyse hiçbir ipucu bırakmadığını fark ederseniz, o zaman dmesg yayınlandığında, büyük olasılıkla istediğiniz şey vardır.

    sudo dmesg | grep -i öldür | daha az

    Oom_killer anahtar kelimesine gidin. Bulunan sonuçlar aşağıdakilere benzer:

    java oom-killer'ı çağırdı: gfp_mask = 0xd0, order = 0, oom_adj = 0, oom_scoe_adj = 0? oom_kill_process + 0x68 / 0x140 Task in / LXC011175068174 / LXC011175068174 bellek sınırı nedeniyle / LXC011175068174 Kill java) puanı 854 veya kurban çocuğu Öldürülen işlem 215701, UID 679, (java) total-vm: 11017300kB, anon-rss: 7152432kB, file-rss: 1232kB

    Yukarıdaki, karşılık gelen java işleminin 854 puanla sistemin OOM Katili tarafından öldürüldüğünü göstermektedir. Makinenin bellek kaynağı tüketimini izleyen OOM katilini (Bellek Dışı katil) açıklayın. Makinenin belleği tükendiğinde, mekanizma tüm işlemleri (belirli kurallara, bellek kullanımına, zamana vb. Göre hesaplanır) tarayacak, en yüksek puana sahip işlemi seçecek ve ardından makineyi korumak için onu öldürecektir.

    dmesg günlük zaman dönüştürme formülü: Gerçek zaman günlüğü = Greenwich 1970-01-01 + (sistem başlangıcından bu yana geçerli zaman-saniye saniye + dmesg tarafından yazdırılan günlük süresi) saniye:

    tarih -d "1970-01-01 UTC" echo "$ (tarih +% s) - $ (cat / proc / uptime | cut -f 1 -d '') + 12288812.926194" | bc "saniye"

    Gerisi, belleğin neden OOM-Killer'ın tetiklenecek kadar büyük olduğunu görmektir.

    Yeni beceri kazanın

    RateLimiter

    QPS'ye ince ayar yapmak mı istiyorsunuz? Örneğin, böyle bir senaryoda bir arayüz çağırırsınız ve diğer taraf açıkça QPS'nizi 400 dahilinde sınırlamanıza ihtiyaç duyar. Bunu nasıl kontrol edersiniz? Şu anda RateLimiter'ın yeri var. Ayrıntılar için lütfen adresine bakın.

    40 yıldır "Juvenil Class": Prodigy aynı zamanda insandır
    önceki
    Bin çağrı! Brother Hammer Valkyrie siyah organizasyonda altın ortak olarak yeniden işe alındı!
    Sonraki
    Biyomekanik modelleri evrimsel algoritmalarda gezinmeyi öğretin
    BMW M240i M Performance resmi resmi, 750 adetle sınırlıdır
    Bu yılki Dünya İç Tasarım Ödülleri kısa listesine bir göz atın, 28 tanesi Çin'de
    Dongfeng Yueda Kia Huanchi bilgi açıkladı veya Ağustos ayında listelenecek
    İlk yarıyılda TA ile, kampüs "karışma" dalgasını bozmayacaktır. Cevap ...
    Güzellik markası Wang Yu Shuang, ev sahibine karşı mücadeleyi canlı yayınlıyor, paket servisle ilgileniyor ve döndükten sonra kafası karışmış görünüyor.
    DeepMind ile yapay zekada insan değerlerini nasıl yeniden üreteceğinizi düşünün
    Çin'in özel araçları neden bu kadar sefil ama satışlar hala bu kadar iyi?
    NIKE 2017'nin en iyi spor ayakkabı listesi! Hangi çifte sahipsiniz?
    Yaramaz film günü patlaması | "Dumbo" Disney'in son yıllardaki "en kötü" gişesi oldu ve "Bohemian Rhapsody" rekor kırdı
    Bu SUV'lerin görünümü ve konfigürasyonu sadece gençler için doğdu!
    55.000 Swarovski kristali ile işlenmiş bu NIKE Air Max 97 çifti, "gümüş mermiyi" saniyeler içinde öldürür!
    To Top