運維雜記-01

#########socket tcp 系統調優#############php

什麼是socket?html

Socket 五元組  1.源ip地址  2. 源端口 3.目的ip地址  4.目的端口  5.類型 TCP or UDP前端

 tcp報頭以下:tcp首部報頭20字節 其中目的端口和源端口分別是16bit,就是2**16-1個可用端口,0-65536 由於0不能用就減一 65535個java

在Centos7中能夠查看可使用的端口數node

[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
32768	60999
#下面是更改方法,通常不建議增長10000如下的端口,由於有些服務可能會使用10000如下#的端口容易引發衝突
[root@192-168-13-165 ~]# echo "10000 65000" > /proc/sys/net/ipv4/ip_local_port_range 
[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
10000	65000

能夠嘗試用ab測試看是否能測試錯socket限制問題,模擬發送2萬個請求,2000的併發來測試百度mysql

[root@192.168.13.165]#ab -n 10000 -c 2000 https://www.baidu.com/
This isApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to TheApache Software Foundation, http://www.apache.org/
 
Benchmarkingwww.baidu.com (be patient)
socket: Toomany open files (24)

報錯咱們很容易看懂了socket: Too many open files (24) 不能打開太多的文件。咱們使用ulimit來看看系統資源限制。linux

[root@test ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31219
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
(省略部分輸出)

沒錯,默認狀況下,當前用戶可以打開的文件數量最大是1024,可是這個和咱們使用ab測試有什麼關係呢?ab測試建立的不是socket嗎?若是你不理解,那就要回歸本質,想一想咱們剛剛學習Linux的時候,常常聽到的一句Linux的思想「一切皆文件」!誰說socket不是一個文件呢?nginx

可使用ulimit –n來修改當前用戶、當前session的限制,也能夠修改配置文件/etc/security/limits.conf來完全解決這個問題,這也是進行系統性能調優的必備基礎。c++


NetCat檢查nc,在網絡工具中有「瑞士軍刀」美譽,其有Windows和Linux的版本。可經過TCP或UDP協議傳輸讀寫數據。同時,它仍是一個網絡應用Debug分析器,由於它能夠根據須要建立各類不一樣類型的網絡鏈接。git

做用:1.遠程拷貝文件  2.克隆硬盤或分區 3.端口掃描 4.保存Web頁面 5.模擬HTTP Headers  6.聊天 7.傳輸目錄  詳細見http://www.cnblogs.com/lpfuture/p/4638335.html

我這裏用於演示tcp socket鏈接

[root@192-168-13-21 ~]# nc -l -4 -p 8888 -k
hah
hello
[root@192-168-13-201 ~]# nc 192.168.13.21 8888
hah
hello
^C
#當13.201 ctrl C的時候查看網絡鏈接狀態爲TIME_WAIT
[root@192-168-13-201 ~]# netstat -an |grep 192.168.13.21
tcp        0      0 192.168.13.201:53667         192.168.13.21:8888           TIME_WAIT   
#在查看13.21
[root@192-168-13-21 ~]# netstat -an |grep 192.168.13.201

#當13.21 ctrl C的時候查看網絡鏈接狀態爲TIME_WAIT
[root@192-168-13-21 ~]# nc -l -4 -p 8888 -k
hah
^C
[root@192-168-13-21 ~]# netstat -an |grep 192.168.13.201
tcp        0      0 192.168.13.21:8888       192.168.13.201:53671     TIME_WAIT  
[root@192-168-13-201 ~]# netstat -an |grep 192.168.13.21
 #從上面的實驗中能夠判斷出TCP的TIME_WAIT狀態只會出如今主動端口的一方!!!
[root@192-168-13-21 ~]# lsof -i:8888  #listopenfile 的簡寫
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 1631 root 3u IPv4 1038816226 0t0 TCP *:ddi-tcp-1 (LISTEN)
nc 1631 root 4u IPv4 1038828329 0t0 TCP 192-168-13-21:ddi-tcp-1->192.168.13.201:53681 (ESTABLISHED)

還有一種叫作僞終端發送數據

[root@192-168-13-201 ~]# echo "hehe" > /dev/tcp/192.168.13.21/8888
服務器端用nc監聽8888就能收到hehe

若是有大量的TIME_WAIT存在,那麼這個套接字對是不釋放的,不釋放也就表明着佔用一個,資源嘛,佔用一個就少一個。

下圖實線爲tcp 三次握手和四次斷開客戶端的狀態變化過程,虛線爲服務器端狀態變化過程

狀態圖來自趙班長:

 

4次揮手

4次揮手,是全雙工通信決定斷開爲何要4次,對數據傳輸負責,斷開須要確認
第一張圖中的2msl 在linux上是60s,用於什麼數據包迷路之類 還沒弄清楚
timewait多了主要佔用了socket,實際上 cpu 和內存資源佔的不多。
因此在服務器通常對socket進行調優
#tcp時間戳 (1爲打開 0爲關閉)
[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/tcp_timestamps 
1

#tcp socket複用 (1爲打開 0爲關閉) 儘可能用複用鏈接,這個配置主要影響的是Web服務器到DB服務器的鏈接複用,由於服務器是客戶端
[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/tcp_tw_reus
0
#tcp socket快速回收 (1爲打開 0爲關閉) 
[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle 
0

1.socket 複用是根據時間戳 默認已經打開,reuse 打開前提是時間戳必須打開。
2.當客戶端處於nat網絡中 不能打開快速回收,通常在負載均衡器上是不開的
ps:
1.socket是有限的 1-65535,從另外一個角度來講多ip能夠解socket數量不足問題。
2.nginx不支持多ip發起請求,haproxy支持多ip發起請求
3.本身寫程序通常要支持多ip發起請求,就是爲了可擴展socket數量。
#############################end#########################

########nginx相關###########

keep-alive在nginx中keepalive_timeout

長鏈接多了cpu資源,少了可能就慢,由於用戶要屢次鏈接。若是在鏈接數很大的狀況下,設置30s到60s的keepalive_timeout區別會很大,併發的鏈接數可能飆升,長鏈接打開須要權衡,包括php到mysql的鏈接,要看mysql的最大鏈接數支持和性能等狀況。

 

Sendfile 函數在兩個文件描述符之間直接傳遞數據(徹底在內核中操做,傳送),從而避免了內核緩衝區數據和用戶緩衝區數據之間的拷貝,操做效率很高,被稱之爲零拷貝。
sendfile的詳細解釋見 http://blog.csdn.net/hnlyyk/article/details/50856268
tcp_nopush on ? 一次報頭 數據屢次發送
tcp_nodelay on ?
以上2個參數不能同時用
nginx進程 master通常是不處理請求
master只進行管理worker進程
nginx如何作滾動升級?會有2個master進程存在,老的處理完 新的接收
nginx reload 就滾動的,若是是下載的請求 nginx reload 可能會有問題,會有不少的worker進程掛起
若是不reload 動態的就實現變動,經過接口的方式?
把lua內嵌的nginx 用lar實現nginx的負載均衡
 
cookie 保存一些服務器的信息 好比 購物車,服務器端保存在redis裏面保留1個月
ping.chainaz.com 分佈式檢查網站等工具
###########nginx end#############
 
#####安裝服務 三步走######
安裝
  1.包管理工具 yum apt-get
     2.編譯安裝 ./configure  make 也是一種編譯器c c++
           java:ant maven gradle
        3.二進制
配置:
         1.網絡 2.路徑 3.容量 4.性能 5.安全 6.功能 7 日誌 。。。。
啓動:
         1.systemctl service
         2.../執行
         3.nohup  screen(推薦)
管理:
優化:
############end###############
############系統相關#############
存儲:
文件存儲 塊存儲 對象存儲
redis 寫個幾十G就差很少了   
內存頁默認4096 磁盤塊默認block 4096 
                 
LevelDB(SSDB 360開發的支持大數據存儲)
 
cpu運行級別 ring0(特權模式) ring1 ring2 ring3(用戶模式)
系統調用 就會進入內核態
cpu 上下文切換,linux 默認cpu切換一個時間片是多少?(做業)
cpu的寄存器 進程調度 優先級
讓linux系統儘可能的不使用交換分區,越低用的越少
如何讓linux儘可能的不使用交換分區,越低用的越少
[root@192-168-13-165 ~]# cat /proc/sys/vm/swappiness 
60
缺頁中斷 cpu ---內存----硬盤(cpu要數據的順序,cpu只往內存要數據)
io調度算法 centos6
[root@192-168-13-165 ~]# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 

io調度算法 centos7

[test@192-168-13-164 ~]$ cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq
ssd 把調度算法 必定用noop,cfq 是徹底公平的調度算法
 
apache用的 select nginx用epoll (多路io複用)

臨地更改I/O調度方法:
例如:想更改到noop電梯調度算法:

echo noop > /sys/block/sda/queue/scheduler

想永久的更改I/O調度方法:
修改內核引導參數,加入elevator=調度程序名

vi /boot/grub/menu.lst

更改到以下內容:

kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

重啓以後,查看調度方法:

cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq

已是deadline了

##################end#####################
##################others#################
斷點續傳的狀態碼是什麼?http 206  經過http頭裏面的range
瀏覽器邊下載邊渲染,從上往下,不一樣的瀏覽器對單域名併發是有限的,多是8或者其它值
瀏覽器還有一種懶加載說法,默認不往下面拉就不加載下面的內容的
瀏覽器加載到js 會先讀取,而後執行,執行完了之後再繼續往下面加載,全部js通常放在html的最下面
web架構若是訪問量小能夠用
nginx(代理)+(nginx(7層處理)+tomcat 不記錄日誌只處理動態請求)
 
趙班長推薦的書:unix網絡編程卷1  性能之巔 abs
相關的技術文章推薦:
運維知識體系:
https://www.unixhot.com/page/ops
nginx結合waf:
https://github.com/unixhot/waf
單臺服務器tcp最大鏈接數
cpu io 內存
http://os.51cto.com/art/201012/240476.htm
前端優化
linux 微觀角度是不區分進程和線程的,理論上進程是包括線程的,線程共享內存空間,進程的內存空間是獨立的
www.cnbolgs.com/wxisme/p/6212797.html  (http)
高級shell編程腳本
http://www.linuxplus.org/kb/
linux系統tcp優化
http://joyexpr.com/2013/11/22/c100k-4-kernel-tuning/
相關文章
相關標籤/搜索