Linux Yüksek İşlemci Kullanımı Load Tespiti
24 Nisan 2018 Yorum 0 618 Görüntüleme

Linux Yüksek İşlemci Kullanımı Load Tespiti

Linux sunucularda makineniz yüksek hitli siteler veya saldırı durumlarında işlemci yada ram kaynaklı olarak timeout yapıp kararsız hale gelerek erişimi kesebilmektedir. Bu tarz durumlarda önceden haber almak önemlidir. Makinenize hemen erişip tespit etmek ise bazen çok fazla detaylı inceleme gerektirecektir. Sunucunuzda load(yük) fazlalaştıgında sizin belirlediğiniz limitlerin üzerine çıkması halinde mail ile size durumu bildiren ufak bir bash scripti ve detaylarını paylaşacağım. Script cpanel sunucularda test edilmiş olup lfd benzeri uyarı haricinde detaylandırabilmektedir.

Scripti Kullanmak için ek olarak cron jobs(zamanlanmış görevler) kısmına belirli aralıklar ile kontrol etmesini sağlatabilirsiniz. Öncelikle ssh bağlantınızı sağlayıp sırası ile aşağıdaki komutları uygulayınız.

"touch alarm.sh nano alarm.sh"

Akabinde nano ile açtığınız dosya içine;

#!/bin/sh

export PATH=/bin:/usr/bin

##########################################################################
#                                                                        #
#  Copyright Jeff Petersen, 2009 - 2013                                  #
#                                                                        #
#  This program is free software: you can redistribute it and/or modify  #
#  it under the terms of the GNU General Public License as published by  #
#  the Free Software Foundation, either version 3 of the License, or     #
#  (at your option) any later version.                                   #
#                                                                        #
#  This program is distributed in the hope that it will be useful,       #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#  GNU General Public License for more details.                          #
#                                                                        #
#  You should have received a copy of the GNU General Public License     #
#  along with this program.  If not, see <http://www.gnu.org/licenses/>. #
#                                                                        #
##########################################################################


###############################################################################
# START USER CONFIGURABLE VARIABLES
###############################################################################

EMAIL="you@example.com"

# 1 minute load avg
MAX_LOAD=3

# kB
MAX_SWAP_USED=1000

# kB
MAX_MEM_USED=500000

# packets per second inbound
MAX_PPS_IN=2000

# packets per second outbound
MAX_PPS_OUT=2000

# max processes in the process list
MAX_PROCS=400

###############################################################################
# END USER CONFIGURABLE VARIABLES
###############################################################################


IFACE=`grep ETHDEV /etc/wwwacct.conf | awk '{print $2}'`
if [[ "$IFACE" =~ "venet" ]] ; then
    IFACE=venet0
fi

IFACE=${IFACE}:

###############################################################################
# 1 min load avg
###############################################################################
ONE_MIN_LOADAVG=`cut -d . -f 1 /proc/loadavg`
echo "1 minute load avg: $ONE_MIN_LOADAVG"


###############################################################################
# swap used
###############################################################################
SWAP_TOTAL=`grep ^SwapTotal: /proc/meminfo | awk '{print $2}'`
SWAP_FREE=`grep ^SwapFree: /proc/meminfo | awk '{print $2}'`

let "SWAP_USED = (SWAP_TOTAL - SWAP_FREE)"
echo "Swap used: $SWAP_USED kB"


###############################################################################
# mem used
###############################################################################
MEM_TOTAL=`grep ^MemTotal: /proc/meminfo | awk '{print $2}'`
MEM_FREE=`grep ^MemFree: /proc/meminfo | awk '{print $2}'`

let "MEM_USED = (MEM_TOTAL - MEM_FREE)"
echo "Mem used: $MEM_USED kB"


###############################################################################
# packets received
###############################################################################
PACKETS_RX_1=`grep $IFACE /proc/net/dev | awk '{print $2}'`
sleep 2;
PACKETS_RX_2=`grep $IFACE /proc/net/dev | awk '{print $2}'`

let "PACKETS_RX = (PACKETS_RX_2 - PACKETS_RX_1) / 2"
echo "packets received (2 secs): $PACKETS_RX"


###############################################################################
# packets sent
###############################################################################
PACKETS_TX_1=`grep $IFACE /proc/net/dev | awk '{print $10}'`
sleep 2;
PACKETS_TX_2=`grep $IFACE /proc/net/dev | awk '{print $10}'`

let "PACKETS_TX = (PACKETS_TX_2 - PACKETS_TX_1) / 2"
echo "packets sent (2 secs): $PACKETS_TX"

let "SWAP_USED = SWAP_TOTAL - SWAP_FREE"
if [ ! "$SWAP_USED" == 0 ] ; then
    PERCENTAGE_SWAP_USED=`echo $SWAP_USED / $SWAP_TOTAL | bc -l`
    TOTAL_PERCENTAGE=`echo ${PERCENTAGE_SWAP_USED:1:2}%`
else
    TOTAL_PERCENTAGE='0%'
fi


###############################################################################
# number of processes
###############################################################################
MAX_PROCS_CHECK=`ps ax | wc -l`

send_alert()
{
    SUBJECTLINE="`hostname` [L: $ONE_MIN_LOADAVG] [P: $MAX_PROCS_CHECK] [Swap Use: $TOTAL_PERCENTAGE ] [pps in: $PACKETS_RX  pps out: $PACKETS_TX]"
    ps auxwwwf | mail -s "$SUBJECTLINE" $EMAIL
    exit
}


if   [ $ONE_MIN_LOADAVG -gt $MAX_LOAD      ] ; then send_alert
elif [ $SWAP_USED       -gt $MAX_SWAP_USED ] ; then send_alert
elif [ $MEM_USED        -gt $MAX_MEM_USED  ] ; then send_alert
elif [ $PACKETS_RX      -gt $MAX_PPS_IN    ] ; then send_alert
elif [ $PACKETS_TX      -gt $MAX_PPS_OUT   ] ; then send_alert
elif [ $MAX_PROCS_CHECK -gt $MAX_PROCS ] ; then send_alert
fi

Kodda yer alan değişecek kısımlar

#Kendi mailinizi yazınız

EMAIL=”you@example.com”

# 1 dk içinde %3 load aşarsa
MAX_LOAD=3

# maximum swap
MAX_SWAP_USED=1000

# maximum ram
MAX_MEM_USED=500000

# sanie başına paket girisi
MAX_PPS_IN=2000

# saniye başına paket çıkışı
MAX_PPS_OUT=2000

# max processes in the process list
MAX_PROCS=400

 

Bu değerleri kendinize göre düzenleyebilirsiniz. Sendmail sunucunuzda açık ise belirlediğiniz değerlere ulaşan yük durumlarında mail adresinize uyarı atacaktır.

Zamanlanmış görevler için;

crontab -e içine

*/10 * * * * /dosyayolu/script.sh
Önceki Windows IIS Site Hatalarını Tarayıcıda Göstermek
Sonraki Büyük Düşünelim Dünyadaki Herkes Aynı Anda Zıplasa

Yazar hakkında

keykubad
keykubad 136 Gönderiler

2012 yılında yeni kimliği ve yeni bilgilerle sizlere teknoloji,web programlama,tasarim,güvenlik,internet ve programlar hakkında detaylı bilgiler vermek amaçlı kurulmuş kişisel web sayfamdır.

Yazara ait tüm yazılar

Diğer yazılarımız

İnternet 0 Yorum

Windows Server İpv4 AutoConfiguration Problemi Gidermek

Bu problem oluştuğunda sunucunuza vermiş olduğunuz statik ip adresi network ayar kısmında gözükmektedir. Ancak Komut istemi ile ip ayarlarınıza baktıgınızda ne yazikki dhcp etkin bir şekilde olacak ve otomatik ip

Sunucu Yönetimi 0 Yorum

Linux Serverlarda Servislerin Kontrolü Gereksiz Servis Kapatılması Detaylı

Açık olan servsilerimizi görmek için chkconfig –list komutunu kullanabiliriz. Bu komutla ekranımıza her init seviyesinden hangi servislerin açılışta çalıştığının listesi gelir. Normalde sunucu olarak yapılandırılan bir linux init3 olarak açılır,

Sunucu Yönetimi 0 Yorum

Mysql Frag Finder Kullanımı Defrag İşlemi

Defrag nedir ne işe yarar ? Nasıl Defrag yapabilirim? Fragment ingilizcede parça anlamına gelir. Fragmentation ise parçalanmayı gösterir. Defrag de toplama anlamına gelir. Siz hdd ye bi veri yazarken bunlar

0 Yorum

Herhangi bir yorum yapılmamış!

İlk yazan olabilirsin bu yazıyı yorumlamak istermisin?

Cevap bırakın

This site uses Akismet to reduce spam. Learn how your comment data is processed.