LINUX Apache/MySQL伺服器故障排除攻略

LINUX Apache/MySQL伺服器故障排除攻略

LINUX Apache/MySQL伺服器故障排除攻略



00.查看CPU 和 磁碟I/O狀況

01.找到CPU使用率比較高的一些程式軟體
	top -H -p pid
	
02.檢查磁碟I/0
	df -hl
	iostat -d -k -x
	iotop #抓到tid 要換回 pid
		pidreadlink -f /proc/*/task/tid/../..
		cat /proc/pid(XXXX)/io
		lsof -p pid(XXXX)


01.外部無法連結時,確定本地端是否可正常連線

    http://127.0.0.1
    http://localhost
    http://Domain Name

02.只有外部連線異常
    ◆確定防火牆有開啟
        -查看防火牆狀態

             systemctl status firewalld

        -開啟防火牆並設置開機自啟

            systemctl start firewalld
            systemctl enable firewalld

            一般需要重啟一下機器,不然後面做的設置可能不會生效
        -開放或限制埠
            1、開放埠-使用的22埠

                firewall-cmd –zone=public –add-port=22/tcp –permanent

            
            2、重新載入一下防火牆設置,使設置生效

                firewall-cmd –reload

            3、可通過如下命令查看是否生效

                firewall-cmd –zone=public –query-port=22/tcp

            
            4、如下命令可查看當前系統打開的所有埠

                firewall-cmd –zone=public –list-ports

            
            5、關掉剛剛打開的22埠

                firewall-cmd –zone=public –remove-port=22/tcp –permanent

                
            6、重新載入一下防火牆設置,使設置生效

                firewall-cmd –reload    

                
            7、批量開放或限制埠

                firewall-cmd –zone=public –add-port=100-500/tcp –permanent

            
            8、重新載入一下防火牆設置,使設置生效

                firewall-cmd –reload

            
            9、查看當前系統打開的所有埠

                firewall-cmd –zone=public –list-ports

                
        -開放或限制IP
            1、限制IP位址訪問-限制IP為192.168.0.200的位址禁止訪問80埠即禁止訪問機器

                firewall-cmd –permanent –add-rich-rule=”rule family=”ipv4″ source address=”192.168.0.200″ port protocol=”tcp” port=”80″ reject”

                
            2、重新載入一下防火牆設置,使設置生效

                firewall-cmd –reload

            3、查看已經設置的規則

                firewall-cmd –zone=public –list-rich-rules

                
            4、解除IP地址限制

                firewall-cmd –permanent –add-rich-rule=”rule family=”ipv4″ source address=”192.168.0.200″ port protocol=”tcp” port=”80″ accept”

            5、重新載入一下防火牆設置,使設置生效

                firewall-cmd –reload

                
            6、限制IP位址段-如我們需要限制10.0.0.0-10.0.0.255這一整個段的IP,禁止他們訪問

                firewall-cmd –permanent –add-rich-rule=”rule family=”ipv4″ source address=”10.0.0.0/24″ port protocol=”tcp” port=”80″ reject”

            7.重新載入一下防火牆設置,使設置生效

                firewall-cmd –reload

                
            8.查看已經設置的規則

                firewall-cmd –zone=public –list-rich-rules         

    ◆查詢連線數量(connections & sessions)

        看全部: netstat -aunt | wc -l
        只看 TCP: netstat -ant | wc -l
        只看 UDP: netstat -aut | wa -l    

        显示网络统计信息

        netstat -s

        显示当前UDP连接状况

        netstat -nu

        显示UDP端口号的使用情况

        netstat -apu

        统计机器中网络连接各个状态个数

        netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

        显示TCP连接

        ss -t -a

        显示sockets摘要信息

        ss -s

        显示所有udp sockets

        ss -u -a

        tcp,etcp状态

        sar -n TCP,ETCP 1

        查看网络IO

        sar -n DEV 1

        抓包以包为单位进行输出

        tcpdump -i eth1 host 192.168.1.1 and port 80 

        抓包以流为单位显示数据内容

        tcpflow -cp host 192.168.1.1

    ◆查看Apache当前并发访问数

        netstat -an | grep ESTABLISHED | wc -l
        #77

    ◆查看httpd进程数

        ps aux|grep httpd|wc -l
        #21

    ◆查看Apache的并发请求数及其TCP连接状态

        netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'
        #SYN_RECV 3
        #TIME_WAIT 76
        #ESTABLISHED 84
        #SYN_SENT 2
        #FIN_WAIT1 2       

    ◆每个ip的连接数,以及总的各个状态的连接数

        netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n",a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}'

        
    ◆MySQL连接访问列表方法小结

        SHOW PROCESSLIST;
        #4 rows
        SELECT * FROM `information_schema`.`PROCESSLIST`;
        #2 rows

03.本地端也無法連結時
    ◆檢查配置檔案的錯誤
        -使用apachectl configtest命令
    ◆學會使用錯誤日誌
        1 錯誤日誌格式
            Apache 預設的錯誤日誌配置如下:

            ErrorLog logs/error_log
            LogLevel warn

            配置錯誤日誌相對簡單,只要說明日誌檔案的存放路徑和日誌記錄等級即可。格式為:
            日期和時間 錯誤等級 錯誤訊息

        2 日誌記錄等級
            下面著重說說日誌記錄等級,包括八個級別。
            1 級英文名稱emerg ,出現緊急情況使得該系統不可用,如系統宕機等
            2 級alert 英文名稱,需要立即引起注意的情況
            3 級 英文名稱crit ,危險情況的警告
            4級 英文名稱error ,除了emerg 、alert、crit 的其他錯誤
            5級英文名稱 warn。 警告資訊
            6級英文名稱 notice ,需要引起注意的情況,但不如error、warn 重要
            7級英文名稱 info ,值得報告的一般訊息
            8級英文名稱 debug, 由運行於debug 模式的程式所產生的訊息

        3 錯誤日誌檔案舉例
            錯誤日誌的格式相對靈活,並可以附加文字描述。某些資訊會出現在絕大多數記錄中,一個典型的例子是:

        [Wed Oct 11 14:32:52 2007] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test

        其中,第一項是錯誤發生的日期和時間;第二項是錯誤的嚴重性,LogLevel指令使只有高於指定嚴重性級別的錯誤才會被記錄;第三項是導致錯誤的IP地址;此後是資訊本身,在此例中,伺服器拒絕了這個客戶的訪問。伺服器在記錄被訪問檔案時,用的是檔案系統路徑,而不是Web路徑。錯誤日誌中會包含類似上述例子的多種型別的資訊。此外,CGI指令碼中任何輸出到stderr的資訊會作為除錯資訊原封不動地記錄到錯誤日誌中。使用者可以增加或刪除錯誤日誌的項。但是對某些特殊請求,在訪問日誌(access log)中也會有相應的記錄,比如上述例子在訪問日誌中也會有相應的記錄,其狀態碼是403,因為訪問日誌也可以定製,所以可以從訪問日誌中得到錯誤事件的更多資訊。    
    
    ◆檢查Apache伺服器模組問題

        如果Apache伺服器可以啟動,但是某些功能無法實現,比如前面介紹的Webdav 功能,通常是提供這個功能的模組沒有載入,此時可以使用命令:“httpd -M”檢視模組載入情況。

        它會輸出一個已經啟用的模組列表,包括靜態編譯在伺服器中的模組和作為DSO動態載入的模組。也可以使用瀏覽器訪問http://192.168.1.12/server-info/?list    

One thought on “LINUX Apache/MySQL伺服器故障排除攻略

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *