Bir işlemin CPU, Bellek veya Diske bağlı olup olmadığını nasıl öğrenebilirim?
Bir işlemin CPU, Bellek veya Diske bağlı olup olmadığını nasıl öğrenebilirim?
Yanıtlar:
Bu biraz vudu gerektiriyor. Değişir. Örnek:
Orada bellek yeter ve diskler çok meşgul görünmüyor, bu olabilir CPU bağlı. CPU kullanımına bakın ve% 100 sınırda ise CPU bağlı. Değilse, uygulamada yapay bir darboğaz var. Örneğin, çift çekirdekli bir işlemcide, tek bir iş parçacıklı işlem% 50 CPU kullanımının üstüne çıkmayacak.
CPU ve bellek varsa, ancak diskler çok meşgulse veya IO gecikmesi yüksek görünüyorsa, bunun muhtemelen IO'su bağlı. Daha fazla disk eklemenin (RAID?) Yardımcı olup olmadığına bakın.
Yukarıdakilerin hiçbiri? Kullanılabilir belleği kontrol edin.
Yeterli hafıza? Sürecin kendisinde yapay bir tıkanıklık olabilir, yani belki birileri bir uykuyu kaldırmayı unutmuş olabilir (1)? Naah genellikle o kadar kolay değil. ;)
Performansa duyarlı ürünlerle uğraşan çoğu şirkette performans mühendisleri için tam bir laboratuarımızın olmasının bir nedeni var!
Mükemmel sorunları ayıklamak için sar, vmstat, iostat, oprofile, lockstat, dtrace, ürüne özel perf izleme araçları vb. Gibi araçları kullanın.
Bahsedilen diğer araçların yanı sıra ps l PID
ilgili işlem kimliğini çalıştırın , ekleyin veya STATE ve WCHAN sütunlarına tepeye ya da tepeye bakın.
D (disk için) durumundaysa, dosya G / Ç yapıyor. Bu, çok fazla dosya okuduğu veya çok fazla bellek kullandığı ve değiştirdiği için olabilir. WCHAN sütunu, içindeki çekirdek fonksiyonunun ne olduğunu size söyleyecektir; onlar için googling yapmak veya buraya sormak size ne anlama geldiklerini gösteren bir işaret verebilir.
R (çalıştırma) durumundaysa, CPU'yu kullanıcı alanında kullanıyor, başka bir deyişle CPU şu anda bağlı.
S (uyku) durumundaysa, kesilebilir bir sistem çağrısının içindedir; bu, aslında ya uyku ya da ağ trafiğini beklemek veya kilitlemek gibi bir şey yapıyor olabilir. Yine, belirli bir wchan bakmak size daha fazla anlatacağım.
Ayrıca bkz . Bir işlemin "Bekleyen Kanalı" nedir?