1.查看當(dāng)前系統(tǒng)每個ip的連接數(shù)
netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn
2.awk取eth0的ip
ifconfig eth0 |grep 'inet'|awk {'print $2'}
ifconfig eth0|awk 'NR==2{print $2}'
3.簡述DNS 進(jìn)行域名解析的過程。
(1)檢查DNS 服務(wù)器的緩存,若查到請求的地址或名字,即向客戶機(jī)發(fā)出應(yīng)答信息;
(2)若沒有查到,則在數(shù)據(jù)庫中查找,若查到請求的地址或名字,即向客戶機(jī)發(fā)出應(yīng)答信息;
(3)若沒有查到,則將請求發(fā)給根域DNS 服務(wù)器,并依序從根域查找頂級域,由頂級查找二級域,二級域查找三級,直至找到要解析的地址或名字,即向客戶機(jī)所在網(wǎng)絡(luò)的DNS服務(wù)器發(fā)出應(yīng)答信息,DNS 服務(wù)器收到應(yīng)答后現(xiàn)在緩存中存儲,然后,將解析結(jié)果發(fā)給客戶機(jī)。
(4)若沒有找到,則返回錯誤信息。
4.TCP 和UDP 區(qū)別是什么?
TCP:傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù),
當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個TCP連接,
之后才能傳輸數(shù)據(jù)。TCP提供超時重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗數(shù)據(jù),
流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。
UDP:用戶數(shù)據(jù)協(xié)議,是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議。
UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)出去,
但是并不能保證他們能夠到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報前不用
在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)機(jī)制,故而傳輸速度很快。
5.tcp三次握手和四次揮手
第一次握手:
客戶機(jī)向服務(wù)器發(fā)送一個syn的數(shù)據(jù)包,進(jìn)入SYN_SEND狀態(tài);
第二次握手:
服務(wù)器收到包,確認(rèn)之后,向客戶機(jī)返回一個ack(和一個syn,此時的服務(wù)器處于SYN_RECV狀態(tài));
第三次握手:
客戶端收到了服務(wù)器返回的syn+ack之后,再向服務(wù)器發(fā)送一個ack,這時候服務(wù)器和客戶機(jī)的連接狀態(tài)是ESTABLISHED。
四次揮手
1.客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。
2.服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認(rèn)序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
3.服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。
4.客戶端A發(fā)回ACK報文確認(rèn),并將確認(rèn)序號設(shè)置為收到序號加1。
6.當(dāng)文件系統(tǒng)受到破壞時,如何檢查和修復(fù)系統(tǒng)?
成功修復(fù)文件系統(tǒng)的前提是要有兩個以上的主文件系統(tǒng),
并保證在修復(fù)之前首先卸載將被修復(fù)的文件系統(tǒng)。
使用命令fsck 對受到破壞的文件系統(tǒng)進(jìn)行修復(fù)。
fsck 檢查文件系統(tǒng)分為5 步,每一步檢查系統(tǒng)不同部分的連接特性并對上一步進(jìn)行驗證和修改。
在執(zhí)行 fsck 命令時,檢查首先從超級塊開始,然后是分配的磁盤塊、
路徑名、目錄的連接性、鏈接數(shù)目以及空閑塊鏈表、i-node。
7.現(xiàn)在給你三百臺服務(wù)器,你怎么對他們進(jìn)行管理?
管理3百臺服務(wù)器的方式:
1)設(shè)定跳板機(jī),使用統(tǒng)一賬號登錄,便于安全與登錄的考量。
2)使用salt、ansiable、puppet進(jìn)行系統(tǒng)的統(tǒng)一調(diào)度與配置的統(tǒng)一管理。
3)建立簡單的服務(wù)器的系統(tǒng)、配置、應(yīng)用的cmdb信息管理。便于查閱每臺服務(wù)器上的各種信息記錄。
8.LVS、Nginx、HAproxy有什么區(qū)別?工作中你怎么選擇?
LVS: 是基于四層的轉(zhuǎn)發(fā)
HAproxy: 是基于四層和七層的轉(zhuǎn)發(fā),是專業(yè)的代理服務(wù)器
Nginx: 是WEB服務(wù)器,緩存服務(wù)器,又是反向代理服務(wù)器,可以做七層的轉(zhuǎn)發(fā)
區(qū)別:
LVS由于是基于四層的轉(zhuǎn)發(fā)所以只能做端口的轉(zhuǎn)發(fā)
而基于URL的、基于目錄的這種轉(zhuǎn)發(fā)LVS就做不了
工作選擇:
HAproxy和Nginx由于可以做七層的轉(zhuǎn)發(fā),所以URL和目錄的轉(zhuǎn)發(fā)都可以做
在很大并發(fā)量的時候我們就要選擇LVS,像中小型公司的話并發(fā)量沒那么大
選擇HAproxy或者Nginx足已,由于HAproxy由是專業(yè)的代理服務(wù)器
配置簡單,所以中小型企業(yè)推薦使用HAproxy
9.什么是中間件?什么是jdk?
中間件介紹:
中間件是一種獨立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源
中間件位于客戶機(jī)/ 服務(wù)器的操作系統(tǒng)之上,管理計算機(jī)資源和網(wǎng)絡(luò)通訊
是連接兩個獨立應(yīng)用程序或獨立系統(tǒng)的軟件。相連接的系統(tǒng),即使它們具有不同的接口
但通過中間件相互之間仍能交換信息。執(zhí)行中間件的一個關(guān)鍵途徑是信息傳遞
通過中間件,應(yīng)用程序可以工作于多平臺或OS環(huán)境。
jdk:jdk是Java的開發(fā)工具包
它是一種用于構(gòu)建在 Java 平臺上發(fā)布的應(yīng)用程序、applet 和組件的開發(fā)環(huán)境
10.統(tǒng)計ip訪問情況,要求分析nginx訪問日志,找出訪問頁面數(shù)量在前十位的ip
cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10
11.Linux系統(tǒng)中病毒怎么解決
1)最簡單有效的方法就是重裝系統(tǒng)
2)要查的話就是找到病毒文件然后刪除
中毒之后一般機(jī)器cpu、內(nèi)存使用率會比較高
機(jī)器向外發(fā)包等異常情況,排查方法簡單介紹下
top 命令找到cpu使用率最高的進(jìn)程
一般病毒文件命名都比較亂,可以用 ps aux 找到病毒文件位置
rm -f 命令刪除病毒文件
檢查計劃任務(wù)、開機(jī)啟動項和病毒文件目錄有無其他可以文件等
3)由于即使刪除病毒文件不排除有潛伏病毒,所以最好是把機(jī)器備份數(shù)據(jù)之后重裝一下
12.發(fā)現(xiàn)一個病毒文件你刪了他又自動創(chuàng)建怎么解決
公司的內(nèi)網(wǎng)某臺linux服務(wù)器流量莫名其妙的劇增,用iftop查看有連接外網(wǎng)的情況
針對這種情況一般重點查看netstat連接的外網(wǎng)ip和端口。
用lsof -p pid可以查看到具體是那些進(jìn)程,哪些文件
經(jīng)查勘發(fā)現(xiàn)/root下有相關(guān)的配置conf.n hhe兩個可疑文件,rm -rf后不到一分鐘就自動生成了
由此推斷是某個母進(jìn)程產(chǎn)生的這些文件。所以找到母進(jìn)程就是找到罪魁禍?zhǔn)?
查殺病毒最好斷掉外網(wǎng)訪問,還好是內(nèi)網(wǎng)服務(wù)器,可以通過內(nèi)網(wǎng)訪問
斷了內(nèi)網(wǎng),病毒就失去外聯(lián)的能力,殺掉它就容易的多
怎么找到呢,找了半天也沒有看到蛛絲馬跡,沒辦法只有ps axu一個個排查
方法是查看可以的用戶和和系統(tǒng)相似而又不是的冒牌貨,果然,看到了如下進(jìn)程可疑
看不到圖片就是/usr/bin/.sshd
于是我殺掉所有.sshd相關(guān)的進(jìn)程,然后直接刪掉.sshd這個可執(zhí)行文件
然后才刪掉了文章開頭提到的自動復(fù)活的文件
總結(jié)一下,遇到這種問題,如果不是太嚴(yán)重,盡量不要重裝系統(tǒng)
一般就是先斷外網(wǎng),然后利用iftop,ps,netstat,chattr,lsof,pstree這些工具順藤摸瓜
一般都能找到元兇。但是如果遇到諸如此類的問題
/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,個人覺得就要重裝系統(tǒng)了
13.查看http的并發(fā)請求數(shù)與其TCP連接狀態(tài)
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
還有ulimit -n 查看linux系統(tǒng)打開最大的文件描述符,這里默認(rèn)1024
不修改這里web服務(wù)器修改再大也沒用,若要用就修改很幾個辦法,這里說其中一個:
修改/etc/security/limits.conf
* soft nofile 10240
* hard nofile 10240
重啟后生效
14.用tcpdump嗅探80端口的訪問看看誰最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 |
awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20
15.如何禁 ping
[root@node0 ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all //這個時候,別人是可以 ping 通自己的
[root@node1 ~]# ping 192.168.6.6
PING 192.168.6.6 (192.168.6.6) 56(84) bytes of data.
64 bytes from 192.168.6.6: icmp_seq=1 ttl=64 time=1.79 ms
64 bytes from 192.168.6.6: icmp_seq=2 ttl=64 time=0.597 ms
[root@node0 ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@node1 ~]# ping 192.168.6.6 //ping 不能了
PING 192.168.6.6 (192.168.6.6) 56(84) bytes of data.
--- 192.168.6.6 ping statistics ---
93 packets transmitted, 0 received, 100% packet loss, time 92168ms
16.Linux中用過哪些中間件?
TomCAT
Nginx
WebLogic
WebSphere
Apache
ES
JBOSS
Jetty
wget
yum
ping
17.MySQL的左右鏈接?
https://www.cnblogs.com/wzh313/p/9077247.html
#SQL提供了多種類型的連接方式,它們之間的區(qū)別在于:從相互交疊的不同數(shù)據(jù)集合中選擇用于連接的行時所采用的方法不同
內(nèi)連接:
只連接匹配的行
左外連接: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)
以及右邊表中全部匹配的行,a.order_id = b.order_id(+)
右外連接: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)
以及左邊表中全部匹配的行,a.order_id(+) = b.order_id
全外連接:
包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
18.MySQL做過備份嗎?用過哪些方法?具體說明.
冷備份:業(yè)務(wù)停止或數(shù)據(jù)庫關(guān)閉,進(jìn)行備份,業(yè)務(wù)影響最大
熱備份:不鎖表備份,只能針對事務(wù)型引擎的表(例如:InnoDB),業(yè)務(wù)的影響最小.
溫備: 鎖表備份,只讀備份,阻塞所有的變更操作,只能讀。
備份工具:
mysqldump
邏輯備份
備份出來的都是SQL語句
可讀性較強,壓縮比高
便于二次處理
是自帶的工具
劣勢就是比較慢
—從磁盤調(diào)數(shù)據(jù) --->內(nèi)存 --->轉(zhuǎn)換成SQL --->xxx.sql
XBK(Xtrabackup)
物理備份工具, 備份的數(shù)據(jù)文件(類似cp),可讀性比較差,不便于處理
備份速度快
支持熱備
自帶了增量備份功能
劣勢就是需要另外安裝,可讀性不友好,不便處理,壓縮比較低
一些備份策略:
全備:全庫備份,備份所有數(shù)據(jù)
增量:備份變化的數(shù)據(jù)
邏輯備份: mysqldump+binlog
物理備份: xtrabackup_full+binlog
備份的周期:
根據(jù)數(shù)據(jù)量設(shè)計備份周期
周日進(jìn)行一次全備,或周1-周6進(jìn)行增量備份
19.如果某個服務(wù)down掉了,要先從哪方面排查故障?
查看應(yīng)用服務(wù)端口是否存活;
查看應(yīng)用服務(wù)的日志;
查看系統(tǒng)負(fù)載情況;
查看內(nèi)存剩余情況;
查看服務(wù)的配置文件是否有書寫錯誤;
查看是否出現(xiàn)網(wǎng)絡(luò)故障;
查看是否出現(xiàn)安全問題,是否被攻擊
查看請求是否過大
查看數(shù)據(jù)庫
20.如何發(fā)布和回滾,用jenkins又是怎么實現(xiàn)?
發(fā)布:jenkins配置好代碼路徑(SVN或GIT),然后拉代碼,打tag。
需要編譯就編譯,編譯之后推送到發(fā)布服務(wù)器(jenkins里面可以調(diào)腳本),
然后從分發(fā)服務(wù)器往下分發(fā)到業(yè)務(wù)服務(wù)器上。
回滾:按照版本號到發(fā)布服務(wù)器找到對應(yīng)的版本推送
21.zabbix監(jiān)控怎么實現(xiàn)的?
現(xiàn)在公司的業(yè)務(wù)都跑在阿里云上,我們首選的監(jiān)控就是用阿里云監(jiān)控,
阿里云監(jiān)控自帶了ECS、RDS等服務(wù)的監(jiān)控模板,可結(jié)合自定義報警規(guī)則來觸發(fā)監(jiān)控項。
上家公司的業(yè)務(wù)是托管在IDC,用的是zabbix監(jiān)控方案,zabbix圖形界面豐富,
也自帶很多監(jiān)控模板,特別是多個分區(qū)、多個網(wǎng)卡等自動發(fā)現(xiàn)并進(jìn)行監(jiān)控做得非常不錯,
不過需要在每臺客戶機(jī)(被監(jiān)控端)安裝zabbix agent。
22.假如有人反應(yīng),調(diào)取后端接口時特別慢,你會如何排查?
問清楚反應(yīng)的人哪個服務(wù)應(yīng)用或者頁面調(diào)取哪個接口慢,叫他把頁面或相關(guān)的URL發(fā)給你,
首先,最直觀的分析就是用瀏覽器按F12,看下是哪一塊的內(nèi)容過慢
(DNS解析、網(wǎng)絡(luò)加載、大圖片、還是某個文件內(nèi)容等),
如果有,就對癥下藥去解決(圖片慢就優(yōu)化圖片、網(wǎng)絡(luò)慢就查看內(nèi)網(wǎng)情況等)。
其次,看后端服務(wù)的日志,其實大多數(shù)的問題看相關(guān)日志是最有效分析,
最好用tail -f 跟蹤一下日志,當(dāng)然你也要點擊測試來訪問接口日志才會打出來。
最后,排除sql,,找到sql去mysql執(zhí)行一下,看看時間是否很久,
如果很久,就要優(yōu)化SQL問題了,expain一下SQL看看索引情況啥的,針對性優(yōu)化。
數(shù)據(jù)量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯代碼的問題了,一行行審代碼,
找到耗時的地方改造,優(yōu)化邏輯。
23.mysql數(shù)據(jù)庫用的是主從讀寫分離,主庫寫,從庫讀,假如從庫無法讀取了、或者從庫讀取特別慢,你會如何解決?
以解決問題為前提條件,先添加從庫數(shù)量,臨時把問題給解決,然后抓取slow log ,
分析sql語句,該優(yōu)化就優(yōu)化處理。慢要不就是硬件跟不上,需要升級;
要不就是軟件需要調(diào)試優(yōu)化,等問題解決在細(xì)化。
24.給你一套環(huán)境,你會如何設(shè)計高可用、高并發(fā)的架構(gòu)?
如果這套環(huán)境是部署在云端(比如阿里云),你就不用去考慮硬件設(shè)計的問題。
可直接上阿里云的SLB+ECS+RDS這套標(biāo)準(zhǔn)的高可用、高并發(fā)的架構(gòu)。
對外服務(wù)直接上SLB負(fù)載均衡技術(shù),由阿里的SLB分發(fā)到后端的ECS主機(jī);
ECS主機(jī)部署多臺,應(yīng)用拆分在不同的ECS主機(jī)上,
盡量細(xì)分服務(wù)。數(shù)據(jù)庫用RDS高可用版本(一主一備的經(jīng)典高可用架構(gòu))、
或者用RDS金融版(一主兩備的三節(jié)點架構(gòu))。
在結(jié)合阿里其它的服務(wù)就完全OK,業(yè)務(wù)量上來了,主機(jī)不夠用了,直橫向擴(kuò)容ECS主機(jī)搞定。
如果這套環(huán)境托管在IDC,那么你就要從硬件、軟件(應(yīng)用服務(wù))雙面去考慮了。
硬件要達(dá)到高可用、高并發(fā)公司必須買多套網(wǎng)絡(luò)硬件設(shè)備
(比如負(fù)載設(shè)備F5、防火墻、核心層交換、接入層交換)
都必須要冗余,由其是在網(wǎng)絡(luò)設(shè)計上,設(shè)備之間都必須有雙線連接。
設(shè)備如果都是跑的單機(jī),其中一個設(shè)備掛了,你整個網(wǎng)絡(luò)都癱瘓了,
就談不上高可用、高并發(fā)了。其次在是考慮應(yīng)用服務(wù)了,
對外服務(wù)我會采用成熟的開源方案LVS+Keepalived或者Nginx+Keepalived,
緩存層可以考慮redis集群及Mongodb集群,中間件等其它服務(wù)可以用kafka、zookeeper,
圖片存儲可以用fastDFS或MFS,如果數(shù)據(jù)量大、又非常多,那么可采用hadoop這一套方案。
后端數(shù)據(jù)庫可采用 “主從+MHA”。這樣一套環(huán)境下來是絕對滿足高可用、高并發(fā)的架構(gòu)。
25.磁盤陣列的概念
磁盤陣列使用場景:提高磁盤的讀寫數(shù)據(jù)速度。
磁盤陣列組成部分:由最少兩塊以上的磁盤組成的。
磁盤陣列的模式:常用的模式raid0、raid1和raid5。
raid0:一份數(shù)據(jù)在多個磁盤存儲相同的數(shù)據(jù),讀取數(shù)據(jù)速度快。
raid0是用來提高讀取數(shù)據(jù)速度的,其用兩塊以上的磁盤組成,是將數(shù)據(jù)同時記錄在這幾個磁盤中,在使用時,
幾塊磁盤各讀取一部分?jǐn)?shù)據(jù)。這種磁盤組因為需要存入的數(shù)據(jù)完全相同,
所以容量和一塊磁盤的容量大小相同,但是讀取速度會變快。
raid1:一份數(shù)據(jù)拆分多份存儲在多個磁盤中,寫入數(shù)據(jù)速度快。
raid1是用來提高寫入數(shù)據(jù)速度的,是在寫入數(shù)據(jù)時將數(shù)據(jù)分成磁盤的份數(shù)分別存在幾塊磁盤中的,
每個磁盤當(dāng)中都是不完整的數(shù)據(jù),所以這種磁盤組的容量將會翻倍,寫入數(shù)據(jù)的速度也會變快。
raid5:集成了raid0和raid1的優(yōu)點,讀寫都很快,但單方面不及raid0和raid5。
raid5本質(zhì)上就是raid0和raid1的結(jié)合,
使得讀取數(shù)據(jù)和寫入數(shù)據(jù)速度都提高,但是加速的結(jié)果不如raid0或者raid1高。