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 giringrep
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şiyor3 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 dosyalarpgm
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üleyebilirsiniztsar --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 2815veya
sudo -u admin / opt / taobao / install / ajdk-8_1_1_fp1-b52 / bin / jmap -dump: format = b, dosya = / tmp / heap3.bin 28153. 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.CLHSDBDaha 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 likeUygulama çı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 sahiptirjar 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 azOom_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: 1232kBYukarı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.