關於Linux運維常見故障排查和處理的33個技巧彙總

做爲linux運維,多多少少會遇見這樣那樣的問題或故障,從中總結經驗,查找問題,彙總並分析故障的緣由,這是一個Linux運維工程師良好的習慣。每一次技術的突破,都經歷着苦悶,伴隨着快樂,可咱們仍是執着的繼續努力,從中也積累了更多的經驗,這就是實踐給予咱們的豐厚回報。css

下面彙總了我作項目過程可能出現的故障及解決方法,看看是否與你有共鳴,並對你有幫助?html

第一:常見問題解決集錦前端

1.shell腳本不執行mysql

問題:某天研發某同事找我說幫他看看他寫的shell腳本,死活不執行,報錯。我看了下,腳本很簡單,也沒有常規性的錯誤,報「:badinterpreter:Nosuchfileordirectory」錯。linux

看這錯,我就問他是否是在windows下編寫的腳本,而後在上傳到linux服務器的……果真。sql

緣由:在DOS/windows裏,文本文件的換行符爲rn,而在*nix系統裏則爲n,因此DOS/Windows裏編輯過的文本文件到了*nix裏,每一行都多了個^M。shell

解決:數據庫

1)從新在linux下編寫腳本;windows

2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)安全

附:sh-x腳本文件名,能夠單步執行並回顯結果,有助於排查複雜腳本問題。

2.crontab輸出結果控制

問題:

/var/spool/clientmqueue目錄佔用空間超過100G

緣由:

cron中執行的程序有輸出內容,輸出內容會以郵件形式發給cron的用戶,而sendmail沒有啓動因此就產生了/var/spool/clientmqueue目錄下的那些文件,日積月累可能撐破磁盤。

解決:

1)直接手動刪除:ls|xargsrm-f;

2)完全解決:在cron的自動執行語句後加上>/dev/null2>&1

3.telnet很慢/ssh很慢

問題:

某天研發某同事說10.50訪問10.52memcached服務異常,讓咱們檢查下看網絡/服務/系統是否有異常。檢查發現系統正常,服務正常,10.50ping10.52也正常,但10.50telnet10.52很慢。同時發現該機器的namesever是不起做用的。

緣由:

becauseyourPCdoesn’tdoareverseDNSlookuponyourIPthen…whenyoutelnet/ftpintoyourlinuxbox,it’lldoadnslookuponyou。

解決:

1)修改/etc/hosts使hostname和ip對應;

2)在/etc/resolv.conf註釋掉nameserver或者找一個「活的」nameserver。

4.Read-onlyfilesystem

問題:

同事在mysql裏建表建不成功,提示以下:

mysql>createtablewosontest(colddname1char(1));  ERROR1005(HY000):Can’tcreatetable‘wosontest’(errno:30) 複製代碼

經檢查mysql用戶權限以及相關目錄權限沒問題;用perror30提示信息爲:OSerrorcode30:Read-onlyfilesystem

可能緣由:

1)文件系統損壞;

2)磁盤又壞道;

3)fstab文件配置錯誤,如分區格式錯誤錯誤(將ntfs寫成了fat)、配置指令拼寫錯誤等。

解決:

1)因爲是測試機,重啓機器後恢復;

2)網上說用mount可解決。

5.文件刪了磁盤空間沒釋放

問題:

某天發現某臺機器df-h已用磁盤空間爲90G,而du-sh/*顯示全部使用空間加起來才30G,囧。

緣由:

可能某人直接用rm刪除某個正在寫的文件,致使文件刪了但磁盤空間沒釋放的問題

解決:

1)最簡單重啓系統或者重啓相關服務。

2)幹掉進程

/usr/sbin/lsof|grepdeleted  ora25575data33uREG65,654294983680/oradata/DATAPRE/UNDOTBS009.dbf(deleted) 複製代碼

從lsof的輸出中,咱們能夠發現pid爲25575的進程持有着以文件描述號(fd)爲33打開的文件/oradata/DATAPRE/UNDOTBS009.dbf。在咱們找到了這個文件以後能夠經過結束進程的方式來釋放被佔用的空間:echo>/proc/25575/fd/33

3)刪除正在寫的文件通常用cat/dev/null>file

6.find文件提高性能

問題:

在tmp目錄下有大量包含picture_*的臨時文件,天天晚上2:30對一天前的文件進行清理。以前在crontab下跑以下腳本,可是發現腳本效率很低,每次執行時負載猛漲,影響到其餘服務。

#!/bin/sh find/tmp-name「picture_*」-mtime+1-execrm-f{}; 複製代碼

緣由:

目錄下有大量文件,用find很耗資源。

解決:

#!/bin/sh cd/tmp time=`date-d「2dayago」「+%b%d」` ls-l|grep「picture」|grep「$time」|awk‘{print$NF}’|xargsrm-rf 複製代碼

7.獲取不了網關mac地址

問題:

從2.14到3.65(映射地址2.141)網絡不通,可是從3端的其餘機器到3.65網絡OK。

緣由:

#arp AddressHWtypeHWaddressFlagsMaskIface 192.168.3.254etherincompletCMbond0 複製代碼

表面現象是機器自動獲取不了網關MAC地址,網絡工程師說是網絡設備的問題,具體不清。

解決:

arp綁定,arp-ibond0-s192.168.3.25400:00:5e:00:01:64

8.http服務沒法啓動一例

問題:某天研發某同事說網站前端環境http沒法啓動,我上去看了下。報以下錯:

/etc/init.d/httpdstart  Startinghttpd:[SatJan2917:49:002011][warn]moduleantibot_moduleisalreadyloaded,skipping  Useproxyforwardasremoteip:true.  Antibotexcludepattern:.*.[(js|css|jpg|gif|png)]  Antibotseedcheckpattern:login  (98)Addressalreadyinuse:make_sock:couldnotbindtoaddress[::]:7080  (98)Addressalreadyinuse:make_sock:couldnotbindtoaddress0.0.0.0:7080  nolisteningsocketsavailable,shuttingdown  Unabletoopenlog[FAILED] 複製代碼

緣由:

1)端口被佔用:表面看是7080端口被佔用,因而netstat-npl|grep7080看了下發現7080沒有佔用;

2)在配置文件中重複寫了端口,若是在如下兩個文件同時寫了Listen7080

/etc/httpd/conf/http.conf  /etc/httpd/conf.d/t.10086.cn.conf 複製代碼

解決:

註釋掉/etc/httpd/conf.d/t.10086.cn.conf的Listen7080,重啓,OK。

9.toomanyopenfile

問題:

報toomanyopenfile錯誤

解決:

終極解決方案

echo「」>>/etc/security/limits.conf  echo「*softnproc65535″>>/etc/security/limits.conf  echo「*hardnproc65535″>>/etc/security/limits.conf  echo「*softnofile65535″>>/etc/security/limits.conf  echo「*hardnofile65535″>>/etc/security/limits.conf  echo「」>>/root/.bash_profile  echoulimit-n65535″>>/root/.bash_profile  echoulimit-u65535″>>/root/.bash_profile 複製代碼

最後重啓機器或者執行ulimit-u655345&&ulimit-n65535

10.ibdata1和mysql-bin致磁盤空間問題

問題:

2.51磁盤空間報警,經查發現ibdata1和mysql-bin日誌佔用空間太多(其中ibdata1超過120G,mysql-bin超過80G)

緣由:

ibdata1是存儲格式,在INNODB類型數據狀態下,ibdata1用來存儲文件的數據和索引,而庫名的文件夾裏的那些表文件只是結構而已。

innodb存儲引擎有兩種表空間的管理方式,分別是:

1)共享表空間(可拆分爲多個小的表空間文件),這個是咱們目前多數數據庫使用的方法;

2)獨立表空間,每個表有一個獨立的表空間(磁盤文件)

對於兩種管理方式,各有優劣,具體以下:

①共享表空間:

優勢:能夠將表空間分紅多個文件存放到不一樣的磁盤上(表空間文件大小不受表大小的限制,一個表能夠分佈在不一樣步的文件上)

缺點:全部數據和索引存放在一個文件中,則隨着數據的增長,將會有一個很大的文件,雖然能夠把一個大文件分紅多個小文件,可是多個表及索引在表空間中混合存儲,這樣若是對於一個表作了大量刪除操做後表空間中將有大量空隙。對於共享表空間管理的方式下,一旦表空間被分配,就不能再回縮了。當出現臨時建索引或是建立一個臨時表的操做表空間擴大後,就是刪除相關的表也沒辦法回縮那部分空間了。

②獨立表空間:在配置文件(my.cnf)中設置:innodb_file_per_table

特色:每一個表都有自已獨立的表空間;每一個表的數據和索引都會存在自已的表空間中。

優勢:表空間對應的磁盤空間能夠被收回(Droptable操做自動回收表空間,若是對於刪除大量數據後的表能夠經過:altertabletbl_nameengine=innodb;回縮不用的空間。

缺點:若是單表增長過大,如超過100G,性能也會受到影響。在這種狀況下,若是使用共享表空間能夠把文件分開,但有一樣有一個問題,若是訪問的範圍過大一樣會訪問多個文件,同樣會比較慢。若是使用獨立表空間,能夠考慮使用分區表的方法,在必定程度上緩解問題。此外,當啓用獨立表空間模式時,須要合理調整innodb_open_files參數的設置。

解決:

1)ibdata1數據太大:只能經過dump,導出建庫的sql語句,再重建的方法。

2)mysql-binLog太大:

①手動刪除:

刪除某個日誌:mysql>PURGEMASTERLOGSTO‘mysql-bin.010′;

刪除某天前的日誌:mysql>PURGEMASTERLOGSBEFORE’2010-12-2213:00:00′;

②在/etc/my.cnf裏設置只保存N天的bin-log日誌

expire_logs_days=30//BinaryLog自動刪除的天數

2、故障排查彙總表

序號

故障點

分析與解決

1

Linux系統安裝初始狀態時,找不到硬盤,並沒有法進入下一步安裝

進入COMS設置,找到硬盤設置的相關選項,並設置爲兼容模式

2

Linux系統安裝時,在硬盤分區完成後,沒法繼續安裝

硬盤分區不符合安裝要求,你可能忘記建立根分區或swap交換分區了,這一點與Windows系統的安裝有區別

3

Linux系統安裝時,制定安裝中,軟件包的選擇感受困惑,安裝完成後發現不符合咱們的要求,有些組件沒有安裝,而不須要的組件卻裝上了

對Linux系統的瞭解還太少,反覆安裝屢次後,天然掌握自如

4

代理服務器的配置過程當中,發現有些過濾規劃未起做用

(1)先檢查對應的功能模塊是否加載成功(2)默認策略是否設置恰當(3)iptables命令語法是否有錯(4)過濾規劃順序可能不當,需調整

5

代理服務器和防火牆的配置完成後,啓動服務,能夠訪問Internet,但不能訪問DMZ區的服務

(1)關閉iptables服務,看是否能夠訪問,若是不能,檢查連通性,若能訪問,說明iptables規則有問題,集中檢查過濾規則的配置與順序

6

再次配置好iptables過濾規則後,重啓iptables服務後,發現原有的規則所有丟失

(1)修改/etc/sysconfig/iptables-config配置文件,將IPTABLES_SAVE_ON_RESTART=」no」改成yes(2)用iptables-save > /etc/sysconfig/iptables命令保存

7

在交換機上劃分VLAN後,不能訪問外網

VLAN的網關未設置或設置不正確

8

在配置DNS服務中,named服務沒法啓動

形成問題可能性:(1)/etc/named目錄下缺乏必要文件(2)/var/named目錄下缺乏必要文件(3)named帳戶權限問題。解決方法:缺乏的文件必須複製到位,啓動文件必須將權限設置爲named帳戶和組帳戶

9

在配置DNS服務中,沒法正確解析域名或IP地址

(1)檢查並修改/var/named下的正向解析區文件和反向解析區文件中的語法與記錄設置(2)檢查/etc/named.conf配置中的zone區域聲明編寫是否有誤(3)檢查是否安裝了bind-chroot軟件包,如安裝了,區域數據庫文件應在/var/named/chroot/var/named目錄中(4)檢查/etc/resolv.conf配置文件是否設定了正確的nameserver

10

dhcpd服務啓動時,提示「No subnet declaration for eth0(10.10.10.2)」

說明eth0的IP地址設置不對,不在dhcp服務的做用域範圍內,必須將eth0的IP設置爲做用域範圍內的IP地址

11

在配置DHCP服務時,配置了多個做用域,結果只有一個做用域的地址能夠分配,其餘不能分配成功

說明主機的網絡接口卡只有一個,若有3個做用域,需配置3個網卡接口eth0、eth1和eth2,分別對應3個做用域。這是使用超級做用域的一種配置方法

12

MySQL數據庫的安裝不能成功,老是提示軟件的依賴關係,形成所要安裝的軟件包不能順利安裝

說明所要安裝的軟件包須要其餘組件或共享庫的支持,MySQL的rpm包安裝方式自己就繁瑣一些,要求安裝的軟件包比較多,包之間的依賴關係很是明顯,根據提示找到須要的組件包並安裝,安裝時要注意軟件包順序

13

測試Web服務,訪問主站點時,無網頁出現,但已經鏈接上服務器

在httpd.conf主配置文件中的「DocumentRoot」選項的設置不當,如/var/www/html/,最後的「/」不能加

14

遠程客戶端沒法訪問samba共享目錄,共享目錄在本地測試成功

關閉iptables服務

15

Samba的smb服務已經啓動成功,訪問samba某個共享目錄時,提示錯誤信息「NT_STATUS_BAD_NETWORK_NAME」

說明共享目錄沒有建立或不存在

16

Samba的smb服務已經啓動成功,提示錯誤信息「NT_STATUS_ACCESS_DENIED」

提示訪問被拒絕,多是登陸的用戶名或密碼有誤,或是iptables啓動了,關閉防火牆

17

Samba的smb服務已經啓動成功,提示錯誤信息「NT_STATUS_LOGON_FAILURE」

不容許當前用戶訪問當前共享目錄,說明此共享目錄設置只容許特定用戶訪問

18

FTP服務配置了本地用戶上傳,但在上傳數據到對應目錄時,提示被拒絕

可能該用戶帳戶對上傳目錄沒有寫權限

19

配置容許本地帳戶登陸FTP後,root帳戶沒法登陸,並提示「500 OOPS:cannot change directory:/root」的錯誤信息,而其餘本地帳戶能夠登陸FTP

檢查是否啓用了SELinux安全系統,並禁止SELinux,能夠編輯/etc/selinux/config文件,將配置項SELINUX=enforcing改成disabled

20

使用郵件客戶端能夠發送郵件,但不能接收郵件

檢查pop3服務是否啓動

21

mount命令掛載NFS服務的共享目錄,好久也沒有響應,NFS服務是正常的

portmap服務沒有啓動,必須啓動該服務

22

本地測試mount掛載NFS共享成功,但在其餘客戶主機mount鏈接時不成功

關閉iptables服務,再測試

文章收集於網絡

相關文章
相關標籤/搜索