1,Linux服務器運行中會在哪些地方產生瓶頸?如何測試這些瓶頸php
磁盤i/o,用dd命令能夠簡單測試磁盤讀寫速度,也能夠用vmstat 1命令査看wa列是否很高 査看cpu負載的命令及用法,要考慮系統有多個cpu的狀況 top査看cpu的狀況,top回車後按1能夠査看到全部cpu的使用狀況• 査看磁盤負載,內存使用的命令: 使用iotop命令能夠査看進程對磁盤的讀寫速度 free -m命令能夠査看內存的使用,咱們須要看第二行的free列 vmstat 1命令能夠査看系統的瓶頸點,當內存不足時,則swpd列會有較大的數值,而且在不斷增長,同時si so兩列的數值也在不斷變化,若是磁盤有負載,wa列數值會偏高.
2,如何記錄一個前臺執行的非守護進程的執行時間,程序執行的時間會分爲幾個部分node
time command ;程序執行時間會分爲三部分,一個是real time,一個是user —個是sys 1) real是時鐘時間-程序從開始至結束的總時間,他包括期間其餘進程所佔用的時間片和進程被阻塞的時間(如10等待的時間〉 2) user被測試程序在用戶棋式下所花的CPU時間,他是進程執行的正真的CPU時間.其餘進程調度的時間片以及阻塞(如10)的時間不包含在內 3) sys是進程在內核中所花費的CPU時間。他表示進程在內核調用中所花的CPU時間,而程序的庫調用仍然運行在用戶空間下user+sys表示程序所執行的CPU時間(不包括10以及其餘進程的CPU時間).
3,什麼是守護進程mysql
守護進程(Daemon)是一種運行在後臺的特殊進程,它獨立於控制終端而且週期性的執行某種任務或等待處理某些發生的事件。因爲在linux中,每一個系統與用戶進行交流的界面稱爲終端,每個今後終端開始運行的進程都會依附於這個終端,這個終端被稱爲這些進程的控制終端,當控制終端被關閉的時候,相應的進程都會自動關閉。可是守護進程卻能突破這種限制,它脫離於終端而且在後臺運行,而且它脫離終端的目的是爲了不進程在運行的過程當中的信息在任何終端中顯示而且進程也不會被任何終端所產生的終端信息所打斷。它從被執行的時候開始運轉,直到整個系統關閉才退出。
4,經常使用的網絡連通性測試工具爲ping和traceroutelinux
1) ping:網絡上的機器都有惟一肯定的IP地址,咱們給目標IP地址發送一個數據包,對方就要返回一個一樣大小的數據包,根據返回的數據包咱們能夠肯定目標主機的存在,能夠初步判斷目標主機的操做系統等。 2) traceroute: traceroute 是利用ICMP 及IP 頭部的TTL。首先,traceroute 送出一個TTL 是1的IP數據包(其實,每次送出的爲3個40字節的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器收到IP數據包時,將TTL減1»此時,TTL變爲0,因此將該路由器會將此IP數據包丟掉,並返回一個ICMP數據包(包括髮IP 包的源地址,IP包的全部內容及路由器的IP地址),當traceroute收到這個消息後,接着繼續發生TTL爲2的IP數據包給第二個路由器。以此類推,直到IP數據包達到最後一臺路由器時,會返回一個ICMP echo reply的數據包
Linux如何掛載windows下的共享目錄? mount.cifs /IP地址/server/ /mnt/server -O user=administrator password=yourpasswd 查看http的併發請求數與其TCP鏈接狀態 netstat -ant |awk '{print $5}' |awk -F ":" '{s[$1]++}END{for(i in s){print s[i],i}}' |sort -rn | ulimit -n 查看linux系統打開最大的文件描述符,這裏默認1024 vim /etc/security/linits.conf * soft nofile 102400 * hard nofile 102400 重啓生效 tcpdump嗅探80端口的訪問看看誰最高 tcpdump -i eth0 port 80 -nn -c 100 | awk -F"." '{print $1"."$2"."$3"."$4"."}'|sort |uniq -c | sort -nr | head -5 (未測試) 查看/var/log目錄下的文件數 find /var/log ! -type d -ls | wc -l ls /var/log/ -lR |grep "^-" |wc -l (這個比較好 ,應該加R) 查看Linux系統每一個ip的鏈接數: netstat -tan |awk 'NR> 2 {print $5}' |awk -F : '{c[$1]++}END{for(i in c ){print c[i],i}}' |sort -rn (不是很滿意,意思差很少) 隨機生成32 位密碼 date +%F |sha256sum | base64 | head -c10 ;echo < /dev/urandom tr -dc a-z | head -c10 ;echo (全小寫) openssl rand -base64 32 apache access.log 訪問最多的5個IP awk '{c[$1]}END{for (i in c)END{print c[i]},i }' |awk -nr | heard -5 cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -n -r | head -5 通常經過hexdump命令 來查看二進制文件的內容。 hexdump -C XXX(文件名) -C是參數 不一樣的參數有不一樣的意義 -C 是比較規範的 十六進制和ASCII碼顯示 -c 是單字節字符顯示 -b 單字節八進制顯示 -o 是雙字節八進制顯示 -d 是雙字節十進制顯示 -x 是雙字節十六進制顯示 ps aux 中的VSZ表明什麼意思,RSS表明什麼意思? VSZ:虛擬內存集,進程佔用的虛擬內存空間 RSS:物理內存集,進程佔用實際物理內存空間 修復檢測/dev/hda3 fsck用來檢查和維護不一致的文件系統。若系統掉電或磁盤發生問題,可利用fsck命令對文件系統進行檢查 簡單的linux 開機啓動順序 BIOS------>MBR------>GRUB----->內核(內核文件系統)-----第一個進程-------inittab ------內核模塊----系統環境啓動腳本----執行/etc/rc.local------/bin/log/ ----/bin/bash 符號鏈接與硬鏈接的區別: 保存當前磁盤分區的分區表 dd 命令是以個強大的命令,在複製的同時進行轉換 dd if=/dev/sda of=./mbr.txt bs=1 count=512 手動 grub grub-install /dev/sda 修改內參數 vim /etc/sysctl.conf sysctl -p apache 限制每秒鏈接數 iptables -A INPUT -p tcp --port 80 -m limit --limit 1/second -j ACCEPT (大概這意思) FTP協議有兩種工做方式:PORT方式和PASV方式,中文意思爲主動式和被動式。 PORT(主動)方式的鏈接過程是:客戶端向服務器的FTP端口(默認是21)發送鏈接請 求,服務器接受鏈接,創建一條命令鏈路。當須要傳送數據時,客戶端在命令鏈路上用PORT 命令告訴服務器:「我打開了XX端口,你過來鏈接我」。 因而服務器從20端口向客戶端的 XX端口發送鏈接請求,創建一條數據鏈路來傳送數據。 PASV(被動)方式的鏈接過程是:客戶端向服務器的FTP端口(默認是21)發送鏈接請 求,服務器接受鏈接,創建一條命令鏈路。當須要傳送數據時,服務器在命令鏈路上用PASV 命令告訴客戶端:「我打開了XX端口,你過來鏈接我」。 因而客戶端向服務器的XX端口 發送鏈接請求,創建一條數據鏈路來傳送數據。 顯示/etc/inittab中以#開頭,且後面跟了一個或者多個空白字符,然後又跟了任意非空白字符的行 grep -E "^#[[:blank:]]+[^[:blank:]]+" 顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行 grep "\:[0-9]\{1\}:" a.txt 批量添加20 個用戶 for i in `swq -w 01 20 ` ; do if [ ! ` id i `] ; then passwd=`<dev/urandom tr -dc a-z | head -c 5` useradd i && echo "user $i :passwd $passwd " && echo "$passwd" | passwd --stdin $i done 腳本判斷ip 是否在線 for ip in `seq 1 254 ` do ping -c1 -w 1 ip.$ip &>/dev/null [ $?] && echo "ip is up " done 建立一個函數,能接受兩個參數: 1)第一個參數爲URL,便可下載的文件;第二個參數爲目錄,即下載後保存的位置; 2)若是用戶給的目錄不存在,則提示用戶是否建立;若是建立就繼續執行,不然,函數返回一個51的錯誤值給調用腳本; 3)若是給的目錄存在,則下載文件;下載命令執行結束後測試文件下載成功與否;若是成功,則返回0給調用腳本,不然,返回52給調用腳本; #bin/bash url=$1 dir=$2 download(){ cd $dir &>/dev/null if [ $? -ne 0 ];then read -p "$dir No such file or directory,create?(y/n)" answer if [ "$answer" == "y" ];then mkdir -p $dir cd $dir wget $url &>/dev/null else return "51" fi else wget $url &>/dev/null fi if [ $? -ne 0 ];then return "52" fi } download history 顯示 命令事件 HISTTIMEFORMAT=「%Y-%m-%d `whoami `」 >> /etc/profile 生成32位隨機密碼 yum -y install expect mkpasswd -l 32 openssl rand -base64 8 | md5sum | cut -c1-32 僞隨機數 openssl rand 用於產生指定長度個bytes的隨機字符。-base64或-hex對隨機字符串進行base64編碼或用hex格式顯示。 openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和數字的組合,3a61800e openssl rand -base64 8 | cksum | cut -c1-8 #八位數字,10784736 date +%s%N #生成19位數字,1287764807051101270 date +%s%N | cut -c6-13 #取八位數字,21793709 date +%s%N | md5sum | head -c 8 #八位字母和數字的組合,87022fda cat /dev/urandom | head -n 32 | md5sum | head -c 32 須要抓取ethl網卡上從127.10.32.5發到本機8080端口的數據包 tcpdump -nn -i eth1 port 8080 and host 127.xxxxx mv/tmp/filel /data/ (請簡述這個命令操做的詳細過程〉 1) 移動/tmp目錄的filel文件到/data/目錄,若是/data/存在同名文件會提示是否覆蓋。 2) mv文件在同一個分區以內是執行的rename的操做,不會更改i節點的信息 該操做對inode表沒有影響,對數據的位置也沒有影響,不移動任何數據。只須要構造一個現有i節點的新目錄項,並解除和舊目錄項的連接。不論文件有多大,執行mv的時間都是「瞬間」完成。 netstat 發現大量的time-wait 客戶端發送FIN 服務端接收一直到服務端發送FIN ,客戶端發送ACK 後,客戶端處於TIME-WAIT狀態,須要停留2msl,目的: 1) 可靠地實現TCP全雙工鏈接的終止 2) 容許老的重複分解在網絡中消逝 首先解釋第一條,在客戶端接收到服務器端的FIN報文以後,會回覆一個ACK,可是該ACI(報文 有可能會丟失,服務器就會從新發送FIN報文給客戶端,因此爲了處理可能出現的重發FIN報文,必須保持一段實現再推出(這是從服務器端考慮。怕服務器端接收不到ACK,而在必定時間後繼續向客戶端發送FIN包) 第二條緣由,假設客戶端用相同的IP地址和端口號,再次鏈接相同的服務器的IP地址和端口號, 那麼上一次的鏈接的報文可能在第二次鏈接中才發送到,爲了不這種混淆,TIMEJ/VAIT等待2MSUMSL爲單個報文在傳遞過程當中的生命期).保證上一次全部的報文都到達,或者在鏈路中被丟棄,才能夠進行下一次鏈接.(從客戶端考慮,客戶端關閉後,當即有進程申請相同的ip和端口與服務器通訊,可是服務器端尚未釋放以前的鏈接狀態信息) Twemproxy是一種代理分片機制,由Twitter開源• Twemproxy做爲代理,可接受來自多個程序的訪問,按照路由規則,轉發給後臺的各個Redis服務器,再原路返回。該方案很好的解決了單個Redis實例承載能力的問題.固然,Twemproxy自己也是單點,須要用Keepalived作高可用方案。經過Twemproxy可使用多臺服務器來水平擴張redis服務,能夠有效的避免單點故陣問題。雖然使用Twemproxy須要更多的硬件資源和在redis性能有必定的損失(twitter測試約20%),可是可以提升整個系統的HA也是至關划算的。不熟悉 twemproxy的同窗,若是玩過nginx反向代理或者mysql proxy,那麼你確定也慊twemproxy 了•其實twemproxy不光實現了redis協議,還實現了memcached協議,什麼意思?換句話說,twemproxy不光能夠代理redis,還能夠代理memcached* (沒背) 在tomcat中,負貴鏈接客戶端(能夠是瀏覽器或web服務器)請求至servlet容器內的web應用程序的組件是C鏈接器(connector) 依據mysql binlog日誌恢復截止到2016.1.110:01:15以前的數據(b丨nlog文件database-binlog.000992) /usr/local/mysql/bin/mysqlbinlog - stop-datetime=f 2016-1-110:01:15 */data/database-binlog.000992 | mysql - uroot -ppassword TCP: time wait bucket table overflow 引發該現象的緣由是服務器tcp的鏈接數太多,超出了內核 echo 20000 > /proc/sys/net/ipv4/tcp_max_tw_buckets 永久有效可以下 vim /etc/sysctl.conf net.ipv4.tcp_max_tw_buckets = 20000 # sysctl -p定義的最大數 netstat -an | grep 80| awk '{print $6}' | sort | uniq -c | sort -rn 可統計當前個鏈接的個數 故障表現: 一:系統日誌頻繁出現:kernel: TCP: time wait bucket table overflow 二:服務器鏈接中,有大量TIME_WAIT netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 5009 FIN_WAIT1 19 ESTABLISHED 3 FIN_WAIT2 2 SYN_RECV 14 CLOSING 146 LAST_ACK 1 解決方案: vi /etc/sysctl.conf 增長如下幾行: net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 ##已經修改 說明: net.ipv4.tcp_syncookies = 1 表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉; net.ipv4.tcp_tw_reuse = 1 表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉; net.ipv4.tcp_tw_recycle = 1 表示開啓TCP鏈接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。 net.ipv4.tcp_fin_timeout = 30 表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。 net.ipv4.tcp_keepalive_time = 1200 表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。 net.ipv4.ip_local_port_range = 1024 65000 表示用於向外鏈接的端口範圍。缺省狀況下很小:32768到61000,改成1024到65000。 net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數。 net.ipv4.tcp_max_tw_buckets = 5000 表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息。默認爲180000,改 爲5000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參 數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。 執行如下命令使配置生效: sysctl -p 主機A須要給主機B傳輸一份10GB的數據,從應用層上能夠作哪些傳輸優化?從TCP上能夠作哪些傳輸優化? 答:從應用層上能夠適當壓縮文件,能夠加快傳輸速度。從tcp上,不要使用ssh傳輸通道,能夠藉助nc命令來傳輸 scp /usr/bin/qpress yankay01:/usr/bin/qpress ssh yankay01 "nc -l 12345 | qpress -dio > /home/yankay/data" & qpress -o /home/yankay/data |nc yankay01 12345 第一行是將gpress安裝到遠程機器上,第二行在遠程機器上使用nc監聽一個端口,第三行壓縮並傳送數據。 ddos問題產生的本質是什麼,闡述你想到的防護思路 答:本質:他們是黑客經過網絡上事先留了木馬後門的価屍主機發動的,只不過他們裝的和正常訪問的數據幾乎同樣,使得NF或其餘防 護設備根本沒法識別哪些是非法的數據流量,最後達到癱瘓網絡的做用。 防護思路:一、採用高性能的網絡設備引 二、儘可能避免NAT的使用 三、充足的網絡帶寬保證 四、升級主機服務器硬件 五、把網站作成靜態頁面 六、充分利用CDN來抵禦攻擊 last命令能夠査看用戶登陸成功的歷史信息, 用less/var/log/secure能夠看登陸日誌 utmp:記錄有關當前登陸用戶的信息使用who命令査看 wtmp:記錄歷史用戶登陸信息,使用last命令査看 Lastlog:記錄最後一次登陸信息使用lsatlog命令査看 Messages:系統基礎日誌,內核、用戶服務的日誌• linux服務器間怎麼實現無密碼登陸 1,在本地生成公司鑰, 2,複製生成的公鑰到目標主機的家目錄下的.ssh 目錄下 2)將公鑰傳送到遠程主機host上面,將公鑰保存文件中,就能夠實現無密碼登陸了。 要注意關閉selinux iptables -t nat -A POSTROUTE -p tcp -d ip --dport 80 -j REDIRECT --to-ports 8080 (本地) -j DNAT --to ip:8080 容許本機對外鏈接80端口(本機能出數據包經過80 端口 iptables -A OUTPUT --dport 80 -j ACCEPT ipatables -A INPUT -t tcp --dport 3306 禁止外界ping 本機 ipatables -A INPUT -p icmp --icmp-type 8 -j DROP 防範DDOS攻擊腳本 #防止SYN攻擊 輕量級預防 iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN iptables -A syn-flood -j REJECT #防止DOS太多鏈接進來,能夠容許外網網卡每一個IP最多15個初始鏈接,超過的丟棄 iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #用Iptables抵禦DDOS (參數與上相同) iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT nginx與php-fpm的兩種鏈接方式及其優缺點 一種是tcp/ip,一種是socket*前者用的是網絡鏈接,本地和遠程均可以連,而socket 只能在本地鏈接• Socket這種方式不依賴於網 絡,也不會消耗網絡鏈接的資源,理論上貌似要比tcp/ip那種方式要快•其實,二者在使用上,速度和效率相差不大 linux 集羣 高可用和負載均衡兩種 時間戳轉換日期 date --date='@2147483647' 當前系統中最長用的十條命令 history | awk '{print $2}' | sort -n |uniq -c | sort -nr | head 空行所在行號 grep -n "^$" /etc/grub2.cfg 打印1-3行 sed -n '1,3p' /etc/grub2.cfg 替換使用 sed -r sed -r 's/#(.*)$/#@/' 22 LAMP的調優跟安全訪問工做有哪些? 答: 1) apache的調優主要包括設置默認虛擬主機並限制訪問、配置訪問日誌並切割、配置靜態文件過時時間、配置防盜鏈等 2) Mysql的調優參考23套mysql部分第6題 3) Php優化參考21套10題 4) 安全訪問主要包括用戶的訪問認證、配置容許或者拒絕ip訪問、根據user_agent限制 瀏覽器訪問等 os7層 答:(1)物理層(Physical Layer)物理層是0SI參考模型的最低層,它利用傳輸介質爲數據鏈路層提供物理鏈接。爲此,該層定義了物理鏈 路的創建、維護和拆除有關的機械、電氣、功能和規程特性。包括信號線的功能、「0」和「1」信號的電平表示、數據傳輸速率、物理 鏈接器規格及其相關的屬性等。物理層的做用是經過傳輸介質發送和接收二進制比特流。 (2) 數據鏈路層(Data Link Layer)數據鏈路層是爲網絡層提供服務的,解決兩個相鄰結點之間的通訊問題,傳送的協議數據單元稱爲數據 幀。數據幀中包含物理地址(又稱MAC地址)、控制碼、數據及校驗碼等信息。該層的主要做用是經過校驗、確認和反饋重發等手段, 將不可靠的物理鏈路轉換成對網絡層來講無差錯的數據鏈路•此外,數據鏈路層還要協調收發雙方的數據傳輸速率,即進行流童控制,以 防止接收方因來不及處理髮送方來的高速數據而致使緩衝器溢出及線路阻塞。 (3) 網絡層(Network Layer)網絡層是爲傳輸層提供服務的,傳送的協議數據單元稱爲數據包或分組。該層的主要做用是解決如何使數據 包經過各結點傳送的問題,即經過路徑選擇算法(路由)將數據包送到目的地。另外,爲避免通訊子網中出現過多的數據包而形成網絡阻 塞,須要對流入的數據包數童進行控制(擁塞控制)•當數據包要跨越多個通訊子網才能到達目的地時,還要解決網際互連的問題。 (4) 傳輸層(TransportLayer)傳輸層的做用是爲上層協議提供端到端的可靠和透明的數據傳輸服務,包括處理差錯控制和流置控制等問 題。該層向高層屏蔽了下層數據通訊的細節,使高層用戶看到的只是在兩個傳輸實體間的一條主機到主機的、可由用戶控制和設定的、可 靠的數據通路。傳輸層傳送的協議數據單元稱爲段或報文。 (5) 會話層(Session Layer)會話層主要功能是管理和協調不一樣主機上各類進程之間的通訊(對話),即負貴創建、管理和終止應用程序之間 的會話。會話層得名的緣由是它很相似於 兩個實體間的會話概念。例如,一個交互的用戶會話以登陸到計算機開始•以註銷結束。 (6) 表示層(PresentationLayer)表示層處理流經結點的數據編碼的表示方式問題,以保證 —個系統應用層發出的信息可被另外一系統的應用 層讀出.若是必要,該層可提供一種標準表示形式,用於將計算機內部的多種數據表示格式轉換成網絡通訊中採用的標準表示形式。數據 壓縮和加密也是表示層可提供的轉換功能之一。 (7) 應用層(Application Layer)應用層是OSI參考模型的最高層,是用戶與網絡的接口. 該層經過應用程序來完成網絡用戶的應用需求,如 文件傳輸、收發電子郵件等 寫一條iptables規則,丟掉每一個IP每秒訪問80端口超過30次的數據包 限速 iptables -A INPUT -p tcp --dport 80 -tcp-flags FIN,SYN,RST,ACK -m connlimit --connlimit-ablove 30 使用rsync + inotify實現兩臺server間,文件實時同步。 history 顯示時間 顯示某程序的依賴庫 ldd `which ssh` 查看某進程打開了哪些文件 進程--進程-PID lsof -p 進程號 使用tcpdump抓取兩臺serverl到server2的新建鏈接的數據包。答:假如361^61*11卩爲1.1.1.1,361^6獷2 1卩爲2.2.2.2 tcpdump -nn src host 1.1.1.1 and dst host 2. 2. 2. 2 50 內的隨機數 echo $((RANDOM%50)) dns相關的經常使用命令答 scp和rsync都是能夠遠程傳輸文件 scp在傳輸的時候是整個文件備份,傳輸的時候霈要初入對方的密碼 rsync傳輸的時候是增量備份,能夠更改配置爲在傳輸文件的時候不用輸入對方的密碼進行 批量建立用戶加密碼 seq -w 01 20