Linux服務器開發經常使用的命令以及遇到的問題

1. 什麼是linux服務器load average?

Load是用來度量服務器工做量的大小,即計算機cpu任務執行隊列的長度,值越大,代表包括正在運行和待運行的進程數越多。
參考資料:http://en.wikipedia.org/wiki/Load_average

php

2. 如何查看linux服務器負載

能夠經過w,top,uptime,procinfo命令,也能夠經過/proc/loadavg文件查看。

html

3. 服務器負載高怎麼辦?

服務器負載(load/load average)是根據進程隊列的長度來顯示的。
當服務器出現負載高的現象時(建議以15分鐘平均值爲參考),多是因爲CPU資源不足,I/O讀寫瓶頸,內存資源不足等緣由形成,也多是因爲CPU正在進行密集型計算。
建議使用vmstat -x,iostat,top命令判斷負載太高的緣由,而後找到具體佔用大量資源的進程進行優化處理。

java

4. 如何查看服務器內存使用率?

能夠經過free,top(執行後可經過shitf+m對內存排序),vmstat,procinfo命令,也能夠經過/proc/meminfo文件查看。

node

5. 如何查看單個進程佔用的內存大小?

可使用top -p PID,pmap -x PID,ps aux|grep PID命令,也能夠經過/proc/$process_id(進程的PID)/status文件查看,例如/proc/7159/status文件。

linux

6. 沒法從linux服務器A登陸到服務器B怎麼辦?

請開發者首先確認服務器A和B是屬於同一個應用,不一樣應用沒法交叉登陸。
1. 當服務器A沒法登陸服務器B時,可使用ping IP和telnet IP 36000命令確認服務器B是否死機,ssh服務是否正常。
若是有異常,登陸open.qq.com管理中心重啓服務器(詳細操做說明見:CVM_V2申請和管理#3.2 服務器重啓)。
2. 若是能夠經過客戶端直接訪問服務器B,可是不能從服務器A登陸服務器B,請經過企業QQ聯繫運維支持協助定位。

ios

7. 如何查看正在使用的服務和端口?

可使用netstat -tunlp,netstat -antup,lsof -i:PORT命令查看。

web

8. 如何查看服務器進程信息?

可使用ps auxww|grep PID,ps -ef,lsof -p PID,top -p PID命令查看。

shell

9. 如何殺死進程?

可使用kill -9 PID(進程號),killall 程序名(好比killall cron)來殺死進程。
若是要殺死的是殭屍進程,則須要殺掉進程的父進程纔有效果,命令爲: kill -9 ppid(ppid爲父進程ID號,能夠經過ps -o ppid PID查找,例如ps -o ppid 32535)。

數據庫

10. 如何查找殭屍進程?

可使用top命令查看殭屍進程(zombie)的總數,使用ps -ef | grep defunct | grep -v grep查找具體殭屍進程的信息。

windows

11. 如何在內網服務器間傳輸數據?

同一應用下的不一樣機器,能夠經過以下命令實現文件傳輸:

scp -P port(使用36000端口) /home/user/localfilename(本地文件路徑) user(使用appid)@serverip:/home/user/removefilename(目標文件路徑)

rsync -e 'ssh -p port(使用36000端口) -q' /home/user/localfilename (本地文件路徑) user(使用appid)@serverip:/home/user/removefilename(目標文件路徑)

12. 爲何啓動不了服務器端口?

服務器端口的啓動監聽,須要從操做系統自己以及應用程序查看。
linux操做系統1024如下的端口只能由root用戶啓動,即須要先運行sudo su –獲取root權限後再啓用服務端口。
應用程序問題,建議經過應用程序啓動日誌來排查失敗緣由,例如端口衝突(騰訊服務器系統使用端口不能佔用,好比36000),配置問題等。

13. 經常使用的linux服務器性能查看命令有哪些?

命令名稱 說明
top 進程監控命令,用來監控系統的總體性能。

能夠顯示系統負載,進程,cpu,內存,分頁等信息,經常使用shift+m和shift+p來按memory和cpu使用對進程進行排序。

vmstat 系統監控命令,重點側重於虛擬內存,也能夠監控cpu,進程,內存分頁以及IO的狀態信息。

例如,vmstat 3 10,每隔3秒輸出結果,執行10次。

iostatc 用於輸出cpu狀態和IO狀態的工具,能夠詳細展現系統的IO信息。

例如iostat -dxmt 10,每10秒以MB的格式輸出IO的詳細信息。

df 用來檢查系統的磁盤空間佔用情況。

例如:df -m,以MB爲單位展示磁盤使用情況。

lsof 列舉系統中被打開的文件,因爲linux是以文件系統爲基礎,此命令在系統管理中頗有幫助。

例如:
lsof -i:36000,顯示使用36000端口的進程
lsof -u root,顯示以root運行的程序
lsof -c php-fpm,顯示php-fpm進程打開的文件
lsof php.ini,顯示打開php.ini的進程。

ps 進程查看命令,能夠用來顯示進程的詳細信息。

經常使用命令參數組合爲,ps -ef,ps aux,推薦使用ps -A -o來自定義輸出字段。
例如:
ps -A -o pid,stat,uname,%cpu,%mem,rss,args,lstart,etime |sort -k6,6 -rn,按所列字段輸出並以第六個字段進行排序
ps -A -o comm |sort -k1 |uniq -c|sort -k1 -rn|head,列出運行實例最多的進程。


其餘經常使用的命令和文件,free -m,du,uptime,w,/proc/stat,/proc/cpuinfo,/proc/meminfo。
參考資料:http://en.wikipedia.org/wiki/Template:Unix_commands,http://www.linuxmanpages.com/


14. Cron不生效怎麼辦?

排查步驟以下:
1. 確認crontab是否正常運行。
能夠運行命令crontab -e添加以下測試條目*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &,而後觀察/tmp/crontest文件。
若是有問題,建議使用ps aux|grep cron查找cron的pid,kill -9 PID結束cron進程,而後經過/etc/init.d/cron start從新啓動cron。

2. 確認cron條目中的腳本路徑爲絕對路徑。
3. 查看運行cron的用戶賬號是否正確,同時查看/etc/cron.deny中是否包含此帳戶。
4. 檢查腳本的執行權限,腳本目錄以及日誌的文件權限。
5. 建議經過後臺方式運行腳本,在腳本條目後添加「&」,例如,*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &

15. 如何設置opensuse服務器開機任務?

Linux內核啓動順序爲:
/sbin/init進程啓動,
而後依次執行init初始腳本,
運行級別腳本/etc/rc.d/rc*.d,*號值等於運行模式,能夠在/etc/inittab中查看,
最後是/etc/rc.d/rc.local。

若是須要配置開機任務,能夠在/etc/rc.d/rc*.d中的S**rclocal文件配置,也能夠在/etc/rc.d/rc.local中配置。

16. 爲何服務器硬盤只讀?

硬盤只讀的常見緣由以下:
1. 磁盤空間滿
能夠經過df -m命令查看磁盤使用狀況,而後刪除多餘的文件釋放磁盤空間(非第三方文件不建議刪除,若是須要請聯繫企業QQ確認);
2. 磁盤inode資源佔用完
能夠經過df -i命令查看,確認相關的進程;
3. 硬件故障。

若是hosting應用經過上述方式仍沒法確認緣由,請經過企業QQ聯繫運維支持協助定位。

17. 如何查看linux系統日誌?

系統級別的日誌文件存放路徑爲/var/log。
經常使用的系統日誌爲/var/log/messages 。

18. 如何查找文件系統大文件?

能夠首先經過df命令查看磁盤分區使用狀況,好比df -m;
而後:
經過du命令查看具體文件夾的大小,好比du -sh ./*,du -h --max-depth=1|head -10;
使用ls命令列出文件以及大小,好比ls -lSh;
另外,也能夠經過find命令直接查看特定目錄下的文件大小,好比find / -type f -size +10M -exec ls -lrt {} \;

19. 如何查看服務器操做系統版本?

能夠經過下列命令查看系統版本:
uname -a,cat /proc/version,cat /etc/issue

20. 如何重啓服務器?

方式1:
登陸open.qq.com管理中心重啓服務器(詳細操做說明見:CVM_V2申請和管理#3.2 服務器重啓)。

方式2:若是方式1不生效,能夠嘗試在服務器上以root運行reboot命令進行重啓。

21. 爲何linux終端顯示中文會出現亂碼?

服務器自己沒有對顯示語言有限制,若是是終端軟件的影響中文的顯示
能夠嘗試調整 選項-會話選項-外觀(secureCRT設置,其餘版本軟件請查找相關設置);
若是是純Linux shell出現亂碼,請使用export命令查看用戶環境變量,查看LANG,LC_CTYPE等環境變量設置。

22. 如何設置經過SecureCRT鏈接CVM服務器的超時時間?

能夠經過以下設置,使SecureCRT鏈接CVM時,不斷開鏈接:
打開secureCRT選項(Options),選擇會話選項(Session Opetions),點擊終端(Terminal),在右側反空閒(Anti-idle)的框中勾選發送協議NO-OP(Send protocol NO-OP),時間設置爲每120秒(every 120 seconds)。

24. 如何得到CVM的root權限?

詳見:root權限說明

25. 爲何刪除linux服務器上的文件,硬盤空間不釋放?

現象:
登陸linux服務器,執行 rm 命令刪除文件,用 df 命令查看硬盤空間,發現刪除文件後,可用的硬盤空間沒有增長。
緣由:
經過 rm 命令刪除文件的時候,若是正好有其它進程在訪問該文件,經過 df 命令查看,刪除的文件佔用的空間是沒有當即釋放的。
解決方法:
使用root權限執行 lsof |grep deleted ,查看正在使用被刪除文件的進程的PID,經過命令 kill -9 PID 殺掉對應的進程便可。

1. 訪問應用慢怎麼辦?

首先開發者需確認訪問慢的緣由,包括用戶緣由,網絡緣由,服務端緣由。
1. 用戶緣由建議從如下方面排查:
用戶電腦性能,電腦病毒,DNS緩存和設置,上網代理,防火牆設置,瀏覽器版本和插件等,能夠經過換電腦測試。

2.網絡緣由建議從如下方面排查:
肯定用戶的IP以及網絡運營商,域名解析是否正確,是否存在跨網,局域網額外限制,到其餘公網服務是否正常,到相關服務器或網絡中間路由節點的網絡延遲,有無丟包,小運營商網絡不穩定等。
建議經過異地正常網絡使用相同賬號測試。

3. 服務端問題建議從如下方面排查:
平臺問題,如CDN異常,請求轉發異常等;服務端問題,如服務器性能,進程情況,程序異常等。

排查時,請配合使用如tcpdump,tracert等各類命令,以及httpwatch,wireshark等抓包工具。
如經過上述技術手段還沒法解決,請提供以上排查信息和數據,經過企業QQ聯繫運維支持協助定位。

2. 經常使用的網絡排障命令?

命令名稱 說明
Ipconfig/ifconfig 顯示計算機TCP/IP的詳細配置,包括DNS信息,例如ipconfig /all,ipconfig /displaydns。

Ping 包發送命令,能夠模擬診斷延遲,丟包,測試網絡情況,例如linux:ping 10.1.1.1 -c 10 -s 800,ping 10.1.1.1 -i 0.5,windows:ping qq.com -t,ping 10.1.1.1 -n 8 -l 800。
Tracert/traceroute 跟蹤路由,顯示數據包到達目的的路徑及各節點的時間,能夠用來發現運營商節點問題和跨網問題等,如tracert qq.com。
Telnet 遠程登陸服務命令,主要用於測試端口狀態,例如telnet 10.1.1.1 8001。
Nslookup 域名查詢工具,主要用來查看域名解析是否正確。
Netstat wc,netstat -an等。


3. 經常使用的網絡抓包工具?

工具名稱 說明
Tcpdump 適用於linux系統。

網絡數據採集分析工具,能夠對網絡數據包進行截獲和分析。
經過設定參數來實現對網絡數據包的各類監控與分析。
例如,tcpdump -i any -nn tcp and port 443,tcpdump -i any "host 10.1.1.1" -n,tcpdump -s 0 -nX -i eth0 host 113.108.20.23等。

Httpwatch 適用於windows系統。

強大的網頁數據分析工具,集成在IE瀏覽器,也可支持firefox,能夠用來診斷前臺接口調試,CDN下載資源慢和頁面響應慢等問題。
建議使用專業版。

Fiddler 適用於windows系統。

獨立的網絡抓包工具,可監聽全部電腦和互聯網的http通信,能夠用來調試和診斷web服務和本地http的交互等問題。

Wireshark 適用於windows和linux系統。

網絡封包分析軟件,能夠實時分析全部支持協議的通信數據


4. 如何查看IP來源及所屬運營商?

請經過如下網站查詢:
Ip.qq.com, ip138.com

5. 如何修改windows本地dns設置?

方法一:
WinXP:
右鍵網上鄰居—>屬性(R)—>右鍵本地連接—>屬性(P),雙擊Internet協議版本4(TCP/IPV4),修改本地DNS設定。
Win7:
開始菜單—>控制面板—>網絡和共享中心—>本地鏈接—>屬性(P),雙擊Internet協議版本4(TCP/IPV4),修改本地DNS設定。

方法二:
開始—>運行—>輸入CDM進入到命令模式,輸入
命令一:netsh interface ip set dns "網卡名" static 主DNS,
命令二:netsh interface ip set dns "網卡名" static 輔DNS編號(例如:主DNS設定:netsh interface ip set dns "本地鏈接" static 8.8.8.8,輔DNS設定:netsh interface ip set dns "本地鏈接" static 8.8.8.8 2)。

6. 如何清理dns緩存?

方法一:
開始菜單—>管理工具—>服務,重啓DNS Client和DHCP client兩項服務。

方法二:
開始菜單—>運行—>輸入CDM進入命令模式,輸入ipconfig/flushdns,回車執行,提示成功便可。

7. 端口不通怎麼辦?

服務端:
確認是否有監聽對應的端口,是否有作訪問限制。

客戶端:
測試鏈接方式是否正常,例如TELNET只能測試TCP端口,UDP端口可使用NETCAT等工具進行測試.能夠經過wireshark和tcpdump等工具查看具體的數據包走向,明肯定位問題。

其餘:
騰訊機房禁止不一樣應用的機器相互訪問,若是同一應用內端口沒法正常訪問,請經過企業QQ聯繫運維支持查詢防火牆設置。

8. Ping不通怎麼辦?

請確認網絡是否可用,域名解析是否正確,服務端是否禁止ICMP包,使用tracert/traceroute協助肯定網絡故障。
如經過上述技術手段還沒法解決,請提供以上排查信息和數據,請經過企業QQ聯繫運維支持協助定位。

9. Telnet不通怎麼辦?

Telnet不通,指的是telnet以後沒有任何返回,若是直接返回信息,則表示telnet是通的,可是請求被直接拒絕。

故障排查步驟:
在telnet源上,經過ping測試網絡是否正常;
在目標機器上,確認服務器是否設置了禁止telnet(默認沒有設置),是否監聽了正確的IP和端口,能夠經過telnet 127.0.0.1測試本地telnet服務;
對於hosting應用,若是經過以上技術手段還沒法解決問題,請提供相應信息和數據,請經過企業QQ聯繫運維支持排查騰訊防火牆設置。

10. Tracert不通怎麼辦?

tracert不通,指的是從某一節點開始,所有是*,而且沒法到達目的,若是隻是中間某一個節點出現*,則只能說明該節點禁止被tracert。

故障排查步驟:
從tracert的第一個節點開始,到最後一個可訪問節點,查詢各節點IP的所屬運營商,能夠判斷網絡訪問路徑以及運營商,而後定位是運營商問題,仍是目標服務的問題。
注意,小運營商跨網問題,須要自助向運營商反饋。

11. 如何測試udp端口是否正常?

Udp包的發送和監聽可使用以下方法:
發送udp包,使用netcat命令,例如netcat -v -u 10.1.1.1 8001,同時使用tcpdump或者netcat監聽udp請求。

12. 如何判斷是否受到DDOS網絡攻擊?

能夠結合如下現象初步判斷是否受到DDOS攻擊:
機器入流量出現陡增,同時出流量急劇降低;
服務器出現大量SYN,TIME_WAIT等異常鏈接( netstat –a |awk '{print $6}' |sort|uniq -c|sort -gk 1);
某些IP訪問頻率太高,佔用大量資源(netstat -tun|awk '{print $5}'|uniq -c|sort -r),致使服務不正常等。

注:騰訊已經對常見的攻擊進行了監控和防範,開發者也可結合自身邏輯在服務器端限制特定IP訪問。

13. 如何防範DDOS網絡攻擊?

爲了防範DDOS網絡攻擊,建議開發者進行以下開發:
1. 建議在Server端引入超時機制,對指定時間內未發送請求或是未發完請求的客戶端主動斷開,規避空鏈接或是慢速請求攻擊;
2. 建議對客戶端請求頻率作統計,對頻繁超過配置的源IP,臨時封禁一段時間,或是使用驗證碼進行限制,防止刷請求;
3. 建議安全保護邏輯前置在全部業務邏輯以前,避免惡意請求消耗過多服務器性能。

14. 服務器如何同時接入電信、聯通、移動三網?

應用爲了兼顧電信、聯通、移動的用戶,通常都須要實現三網接入,讓三個運營商的用戶進入都不須要跨網,保證應用質量。
騰訊開放平臺提供了TGW域名接入方案(詳見:域名接入),開發者只須要經過域名綁定,讓一個域名同時綁定在電信、聯通、移動的代理機器上,便可讓電信的用戶經過電信代理訪問應用,聯通的用戶經過聯通的代理進入,移動的用戶經過移動的代理進入,知足了應用對三網接入的需求。

15. 用戶網絡有問題怎麼辦?

單個用戶網絡問題,建議開發商協助用戶檢查其電腦設置,包括DNS,上網代理,防火牆,局域網設置,是否跨網等;
若是是批量用戶出現網絡問題,能夠收集共性信息,好比地域,運營商,訪問方式等,而後經過企業QQ聯繫運維支持進行問題定位和解決。

16. http訪問出現40x怎麼辦?

當http返回碼出現40x的時候,表示用戶提交的請求被服務器接受,可是被認爲是錯誤的請求,包括:
請求語法錯誤,請求文件不存在,服務器拒絕請求,客戶端請求發送超時等。
開發者須要結合客戶端請求和服務端設置來詳細定位。詳細返回信息信息請參考:
http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

17. http訪問出現50x怎麼辦?

當http返回碼出現50x的時候,表示服務器在處理正確請求時,出現了內部錯誤,屬於服務端問題。
建議開發者在服務代碼和邏輯中進行定位。詳細返回碼信息請參考:
http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

以上信息是否解決您的問題?

是否

肯定





1、    經常使用命令

pstree查看進程樹。能夠很清楚的看到進程之間的關係;

Top:查看各進程的佔用資源的狀況;

du -h --max-depth=1 顯示當前目錄中全部子目錄的大小;

w 查看服務器的load狀況

bigip 在預發佈機器上使用命令bigip sh ${ip/機器名} {username}」 能夠檢查機器是在F5上狀態是disable仍是enable.

gm.sh "curl http://localhost/monitor/ok.html"     在預發佈機器上檢查各個服務器的健康檢查頁面。

gm.sh "ps amx | grep httpd | wc -l"   在預發佈機器上檢查各個服務器的http連接數

 

2、    proc下的僞文件。 如:meminfo 檢查內存信息,cpuinfo 內核信息。

cat /proc/cpuinfo 檢查cpu的信息。咱們的一些程序根據cpu內核的數量作過優化(如:memcached假的多核可能會引發一些bug。)

如上圖 baike-web1 4核的,baike-web2是雙核超線程的。

擁有相同 physical id 的全部邏輯處理器共享同一個物理插座。每一個 physical id 表明一個惟一的物理封裝。Siblings 表示位於這一物理封裝上的邏輯處理器的數量,若是不存在表示1。每一個 core id 均表明一個惟一的處理器內核。全部帶有相core id 的邏輯處理器均位於同一個處理器內核上。若是有一個以上邏輯處理器擁有相同的 core id 和 physical id,則說明系統支持超線程(HT)技術。若是有兩個或兩個以上的邏輯處理器擁有相同的 physical id,可是 core id不一樣,則說明這是一個多內核處理器。

 

    網絡鏈接

netstat: -t: 顯示TCP連接信息;-u: 顯示UDP連接信息;-n直接顯示ip,不作名稱轉換;-p: 顯示相應的進程PID以及名稱(要root權限)

若是要查看關於sockets更詳細佔用信息等,可使用lsof.

a)   netstat -anp|grep java|grep 3306|wc –l檢查Java進程中數據庫的連接數量

b)   netstat -na|grep ESTABLISHED|awk '{print $4}'|grep ":80$"|wc –l  檢查已經創建的80端口的鏈接數

c)         netstat -na |grep 「:2088」  檢查搜索引擎的鏈接數

 

    dump java進程堆棧

a)   kill -3 ${java進程Id},能夠在java進程的日誌中看到輸出(jboss 記錄在jboss_stdout.log)

b)   jstack $pid.      直接dump當前進程的的堆棧信息。

對於thread dump信息,主要關注的是線程的狀態和其執行堆棧,特別是load很高的時候,經過thread dump能夠看到線程到底在幹嗎,從中找出問題。 線程的狀態通常爲三類: runable:當前能夠運行的線程, Waiting on monitor:線程主動wait, Waiting for monitor entry:線程等鎖. Cpu很忙則關注runnable的線程,Cpu閒則關注waiting for monitor entry的線程。

 

 

    java內存溢出

1 能夠先用 jstat  -gcutil ${pid} {interval}  看看java內存回收的動態信息。 interval– 表示間隔打印的時間,單位爲毫秒

圖中參數含義以下:

S0  — Heap上的 Survivor space 0區已使用空間的百分比

S1  — Heap上的 Survivor space 1 區已使用空間的百分比

E   — Heap上的 Eden space 區已使用空間的百分比

O   — Heap上的 Old space 區已使用空間的百分比

P   — Perm space 區已使用空間的百分比

YGC — 從應用程序啓動到採樣時發生 Young GC 的次數

YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒)

FGC — 從應用程序啓動到採樣時發生 Full GC 的次數

FGCT– 從應用程序啓動到採樣時 Full GC 所用的時間(單位秒)

2. 使jmap dump  java內存中所有對象,分析死鎖的位置。

jmap -histo $pid  快速查看當前內存中各個Java對象的大小和數量

jmap -dump:live,format=b,file=heap.dmp $pid   能夠將jvm堆棧中的信息所有複製到文件head.dmp中,注意這個heap.dmp文件會比較大, 線上jboss分配的內存通常爲2g,當內存溢出時dump出來的head.dmp文件也是2g,因此dump的時間也比較長,通常會有半個小時.

日誌文件生成後運行命令「jhat -J-mx768m -port 7001 heap.dmp」分析堆棧日誌(注意不要在線上服務器上分析)。 訪問 http://localhost:7001能夠查看分析報告。

或者可使用eclipse mat插件分析,它能夠以圖形形式分析出內存中的java對象的分佈: (插件地址http://download.eclipse.org/mat/1.0/update-site/).導入後能夠生成一個圖形報表

 

    7001端口報警。

通常狀況是jboss掛掉了。由於java進程已經退出。1首先須要查看:jboss_stdout.log,它會告訴你jboss crash的一些信息,它還會告訴你在jboss  crash有一個詳細的出錯報告, 位置在/web-deploy/bin/hs_err_pid.log

 

    cookie日誌分析

cat cookie_log|awk '{print $1} '|grep -v "172.16"|grep -v "127.0.0.1"|sort|uniq -c|sort -n |tail -n 10  提取訪問量前10位的ip.

cat cookie_log |grep '09/Dec/2010:18:01'|wc –l 檢查18:01這一分鐘的訪問總量。

cat cookie_log|grep 'HTTP/.../" [4|5]'|more  查看響應出錯的請求。

cat cookie_log |grep -E 'Googlebot|Baiduspider'|wc –l統計googlebaike爬蟲的訪問量。

相關文章
相關標籤/搜索