導航:首頁 > 操作系統 > linuxtcp重傳

linuxtcp重傳

發布時間:2022-05-31 19:51:42

1. linux怎麼查看tcp擁塞控制

簡單說,主要是三個主要方法:
1、慢開始與擁塞避免
2、快重傳和快恢復
3、隨機早期檢測RED

詳細的內容,網路後很詳細,在這里配圖再解釋一是太麻煩,內容太多,二是沒必要重復。

2. linux下怎麼查看伺服器性能

1.1 cpu性能查看

1、查看物理cpu個數:

cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

2、查看每個物理cpu中的core個數:

cat /proc/cpuinfo |grep "cpu cores"|wc -l

3、邏輯cpu的個數:

cat /proc/cpuinfo |grep "processor"|wc -l

物理cpu個數*核數=邏輯cpu個數(不支持超線程技術的情況下)

1.2 內存查看

1.3 硬碟查看

1、查看硬碟及分區信息:

fdisk -l

2、查看文件系統的磁碟空間佔用情況:

df -h

3、查看硬碟的I/O性能(每隔一秒顯示一次,顯示5次):

iostat -x 1 5

iostat是含在套裝systat中的,可以用yum -y install systat來安裝。

常關注的參數:

如%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。如idle小於70%,I/O的壓力就比較大了,說明讀取進程中有較多的wait。

4、查看linux系統中某目錄的大小:

-sh /root

如發現某個分區空間接近用完,可以進入該分區的掛載點,用以下命令找出佔用空間最多的文件或目錄,然後按照從大到小的順序,找出系統中佔用最多空間的前10個文件或目錄:

-cksh *|sort -rn|head -n 10

以上命令的詳細介紹可如下查詢:

3. Linux裡面tcp和tcp6區別是什麼

指代不同
TCP:是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議。
TCP6:是互聯網工程任務組設計的用於替代ipv4的下一代ip協議。
功能不同
TCP:適應支持多網路應用的分層協議層次結構,連接到不同但互連的計算機通信網路的主計算機中的成對進程之間依靠TCP提供可靠的通信服務。
TCP6:ipv6具有更大的地址空間,ipv4中規定ip長度為32,最大地址個數為2^32,IPv6中ip地址的長度為128,即最大地址個數為2^128。與32位地址空間對比,其地址空間增加了2^128-2^32個。
特點不同
TCP:TCP應該能夠在從硬線連接到分組交換或電路交換網路的各種通信系統之上操作。
TCP6:不僅能解決網路地址資源數量的問題,而且也解決了多種接入設備連入互聯網的障礙。

4. linux tcp sack lost 什麼時候重傳

TCPfilter的原理:當filter收到某個連接的第一個報文時,會為該連接在全局連接表中創建一個表項,並用報文中攜帶的源、目的IP和埠這個四元組創建originaltuple和replytuple,這兩個tuple分別從不同方向來標識這個連接。後續的報文會根據其攜帶的四元組找到相應的連接表項,然後根據表項所記錄的歷史狀態,檢查報文所攜帶的ack、數據是否有效。filter通過分析該連接所有的歷史報文,計算出ack和數據相應的最大最小閥值,來檢查新到達報文ack和數據的有效性。該連接相關的最大最小閥值是動態變化的,當新報文通過有效性檢查後,閥值將使用新報文所攜帶的內容重新計算。在討論如何確立閥值之前,先來看幾條約定。假設A和B之間的報文都經過filter,那麼:lfilter可以看到A、B之間的所有報文數據;lfilter可以看到每個報文中所聲明的窗口大小;l如果B發送的報文的ACK標志位置位,且ACK=n,那麼filter可以認為B已接收到的A數據,其長度至少為n。1),連接項中當前有效數據邊界的確立:假設A向B發送的報文中,所含數據段為[seq,seq+len),即報文所含數據起始SEQ為seq,數據長度為len。由於A所發送的報文長度不能超過B當前窗口所能容納的大小,因此有效數據的上限為:A:seq+len=A:ma...

5. linux tcp 多久沒有收到ack 就重傳

關機的時候linux需要做一些設置,比如對一些驅動的參數進行保存啦什麼的,這個時候可能是某些設備驅動操作的時候出錯了,就hang死在哪裡的,或者出問題之後程序返回個-1什麼的就直接把關機流程給停止了。

6. Linux下TCP客戶端重連還需要重新建立套接字嗎

從函數調用上來分析(msdn):一旦完成了套接字的連接,應當將套接字關閉,並且釋放其套接字句柄所佔用的所有資源。真正釋放一個已經打開的套接字句柄的資源直接調用closesocket即可,但要明白closesocket的調用可能會帶來負面影響,具體的影響和...

7. 如何在linux下用tcp傳輸文件

一. FTP 說明 linux 系統下常用的FTP 是vsftp, 即Very Security File Transfer Protocol. 還有一個是proftp(Profession ftp)。 我們這里也是簡單的說明下vsftp的配置。 vsftp提供3種遠程的登錄方式: (1)匿名登錄方式 就是不需要用戶名,密碼。就能登錄到伺服器電腦裡面 (2)本地用戶方式 需要帳戶名和密碼才能登錄。而且,這個帳戶名和密碼,都是在你linux系統裡面,已經有的用戶。 (3)虛擬用戶方式 同樣需要用戶名和密碼才能登錄。但是和上面的區別就是,這個用戶名和密碼,在你linux系統中是沒有的(沒有該用戶帳號) 二. Vsftp的安裝配置 2.1 安裝 vsftp 的安裝包,可以在安裝里找到。 用yum 安裝過程也很簡單。 安裝命令:yum install vsftpd 2.2. 相關命令 2.2.1 啟動與關閉 [root@singledb ~]# service vsftpd start Starting vsftpd for vsftpd: [ OK ] [root@singledb ~]# service vsftpd stop Shutting down vsftpd: [ OK ] [root@singledb ~]# service vsftpd restart Shutting down vsftpd: [FAILED] Starting vsftpd for vsftpd: [ OK ] [root@singledb ~]# /etc/init.d/vsftpd start Starting vsftpd for vsftpd: [FAILED] [root@singledb ~]# /etc/init.d/vsftpd stop Shutting down vsftpd: [ OK ] [root@singledb ~]# /etc/init.d/vsftpd restart Shutting down vsftpd: [FAILED] Starting vsftpd for vsftpd: [ OK ] [root@singledb ~]# /etc/init.d/vsftpd status vsftpd (pid 3931) is running... [root@singledb ~]# 2.2.2. 其他命令 --查看vsftpd 啟動狀態 [root@singledb ~]# chkconfig --list vsftpd vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@singledb ~]# chkconfig vsftpd on [root@singledb ~]# chkconfig --list vsftpd vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 這里看到,默認情況下從2到5設置為on了。2到5是多用戶級別。 這個對應的是linux不同的運行級別。 我們也可以加level 選項來指定: [root@singledb ~]# chkconfig --level 0 vsftpd on [root@singledb ~]# chkconfig --list vsftpd vsftpd 0:on 1:off 2:on 3:on 4:on 5:on 6:off 我們看到0已經設置為on了。 我們可以使用man chkconfig 來查看幫助: --level levels Specifies the run levels an operation should pertain to. It is given as a string of numbers from 0 to 7. For example, --level 35 specifies runlevels 3 and 5. 傳統的init 定義了7個運行級(run level),每一個級別都代表系統應該補充運行的某些特定服務: (1)0級是完全關閉系統的級別 (2)1級或者S級代表單用戶模式 (3)2-5 級 是多用戶級別 (4)6級 是 重新引導的級別 (1)查看防火牆 我一般都是把系統的防火牆關閉了。 因為開了會有很多限制。 [root@singledb ~]# /etc/init.d/iptables status Table: nat Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24 Chain OUTPUT (policy ACCEPT) num target prot opt source destination Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 3 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED 2 ACCEPT all -- 192.168.122.0/24 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT) num target prot opt source destination You have new mail in /var/spool/mail/root --添加開放21號埠: [root@singledb ~]# /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT [root@singledb ~]# /etc/init.d/iptables status Table: nat Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24 Chain OUTPUT (policy ACCEPT) num target prot opt source destination Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 2 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 4 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED 2 ACCEPT all -- 192.168.122.0/24 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT) num target prot opt source destination --保存配置 [root@singledb ~]# /etc/rc.d/init.d/iptables save Saving firewall rules to /etc/sysconfig/iptables: [ OK ] --重啟防火牆: [root@singledb ~]# service iptables {startstoprestart} (2)查看關閉selinux [root@singledb ~]# sestatus SELinux status: disabled 我這里在安裝操作系統的時候就關閉了selinux,如果沒有關閉,可以修改如下文件來關閉: [root@singledb ~]# cat /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=disabled # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted [root@singledb ~]# 保存退出並重啟系統reboot 三. FTP配置文件 FTP 安裝好之後,在/etc/vsftpd/目錄下會有如下文件: [root@singledb ~]# cd /etc/vsftpd/ [root@singledb vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh [root@singledb vsftpd]# vsftpd.conf: 主配置文件 ftpusers: 指定哪些用戶不能訪問FTP伺服器 user_list: 指定的用戶是否可以訪問ftp伺服器由vsftpd.conf文件中的userlist_deny的取值來決定。 [root@singledb vsftpd]# cat user_list # vsftpd userlist # If userlist_deny=NO, only allow users in this file # If userlist_deny=YES (default), never allow users in this file, and # do not even prompt for a password. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers # for users that are denied. 我們過濾掉#的注釋後,查看一下vsftpd.conf 文件: [root@singledb ftp]# cat /etc/vsftpd/vsftpd.conf grep -v '^#'; anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=yes tcp_wrappers=YES 至於這些參數的意思,在注釋里有詳細的說明。 我們可以在vsftpd.conf 文件設置如下參數: (1)ftpd_banner=welcome to ftp service :設置連接伺服器後的歡迎信息 (2)idle_session_timeout=60 :限制遠程的客戶機連接後,所建立的控制連接,在多長時間沒有做任何的操作就會中斷(秒) (3)data_connection_timeout=120 :設置客戶機在進行數據傳輸時,設置空閑的數據中斷時間 (4)accept_timeout=60 設置在多長時間後自動建立連接 (5)connect_timeout=60 設置數據連接的最大激活時間,多長時間斷開,為別人所使用; (6)max_clients=200 指明伺服器總的客戶並發連接數為200 (7)max_per_ip=3 指明每個客戶機的最大連接數為3 (8)local_max_rate=50000(50kbytes/sec) 本地用戶最大傳輸速率限制 (9)anon_max_rate=30000匿名用戶的最大傳輸速率限制 (10)pasv_min_port=埠 (11)pasv-max-prot=埠號 定義最大與最小埠,為0表示任意埠;為客戶端連接指明埠; (12)listen_address=IP地址 設置ftp服務來監聽的地址,客戶端可以用哪個地址來連接; (13)listen_port=埠號 設置FTP工作的埠號,默認的為21 (14)chroot_local_user=YES 設置所有的本地用戶可以chroot (15)chroot_local_user=NO 設置指定用戶能夠chroot (16)chroot_list_enable=YES (17)chroot_list_file=/etc/vsftpd/chroot_list(只有/etc/vsftpd/chroot_list中的指定的用戶才能執行 ) (18)local_root=path 無論哪個用戶都能登錄的用戶,定義登錄帳號的主目錄, 若沒有指定,則每一個用戶則進入到個人用戶主目錄; (19)chroot_local_user=yes/no 是否鎖定本地系統帳號用戶主目錄(所有);鎖定後,用戶只能訪問用戶的主目錄/home/user,不能利用cd命令向上轉;只能向下; (20)chroot_list_enable=yes/no 鎖定指定文件中用戶的主目錄(部分),文件:/chroot_list_file=path 中指定; (21)userlist_enable=YES/NO 是否載入用戶列表文件; (22)userlist_deny=YES 表示上面所載入的用戶是否允許拒絕登錄; (23)userlist_file=/etc/vsftpd/user_list 列表文件 限制IP 訪問FTP: #vi /etc/hosts.allow vsftpd:192.168.5.128:DENY 設置該IP地址不可以訪問ftp服務 FTP 訪問時間限制: #cp /usr/share/doc/vsftpd-1.1.3/vsftpd.xinetd /etc/xinetd.d/vsftpd #vi /etc/xinetd.d/vsftpd/ 修改 disable = no access_time = hour:min-hour:min (添加配置訪問的時間限制(註:與vsftpd.conf中listen=NO相對應) 例: access_time = 8:30-11:30 17:30-21:30 表示只有這兩個時間段可以訪問ftp ftp的配置基本上只有這些了。 默認情況下,ftp根目錄是/var/ftp。 如果要修改這個目錄位置,可以更改/etc/passwd 文件: [root@singledb ftp]# cat /etc/passwd grep ftp ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 創建一個用戶來訪問FTP,並指定該用戶的FTP 目錄: [root@singledb u02]# useradd -d /u02/qsftp qs [root@singledb u02]# passwd qs Changing password for user qs. New UNIX password: BAD PASSWORD: it is WAY too short Retype new UNIX password: passwd: all authentication tokens updated successfully. 這里指定的是/u02/qsftp 這個目錄,要注意個目錄的許可權。 更改用戶不能telnet,只能ftp: usermod -s /sbin/nologin username //用戶只能ftp,不能telnet usermod -s /sbin/bash username //用戶恢復正常 禁止用戶ssh登陸 useradd username -s /bin/false 更改用戶主目錄: usermod -d /bbb username //把用戶的主目錄定為/bbb 然後用qs這個用戶就可以訪問了。 以上只是一些簡單的設置。 在用戶許可權這塊還有很多內容可以研究。 比如特定用戶的特定許可權。 安全性等。 以後在研究了。

8. linux內核TCP對重復丟失的報文是如何處理的

答:抓包命令tcpmp tcp -A port 22 -w a.cap 將報文內容存在a.cap裡面。a.cap文件是2進制的,需要用ethreal工具專門讀齲

9. linux tcp重傳定時器能設置么

不是的,大多數源於伯克利的TCP實現在任何時候對每個連接僅測量一次RTT值。在發送一個報文 段時,如果給定連接的定時器已經被使用,則該報文段不被計時。你看看tcp/ip詳解第一卷,230頁圖21-2就懂了

10. linux系統怎樣查看伺服器性能命令

通過執行以下命令,可以在1分鍾內對系統資源使用情況有個大致的了解。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
其中一些命令需要安裝sysstat包,有一些由procps包提供。這些命令的輸出,有助於快速定位性能瓶頸,檢查出所有資源(CPU、內存、磁碟IO等)的利用率(utilization)、飽和度(saturation)和錯誤(error)度量,也就是所謂的USE方法。
下面我們來逐一介紹下這些命令,有關這些命令更多的參數和說明,請參照命令的手冊。
uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02

這個命令可以快速查看機器的負載情況。在Linux系統中,這些數據表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態為D)的數量。這些數據可以讓我們對系統資源使用有一個宏觀的了解。
命令的輸出分別表示1分鍾、5分鍾、15分鍾的平均負載情況。通過這三個數據,可以了解伺服器負載是在趨於緊張還是區域緩解。如果1分鍾平均負載很高,而15分鍾平均負載很低,說明伺服器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪裡。反之,如果15分鍾平均負載很高,1分鍾平均負載較低,則有可能是CPU資源緊張時刻已經過去。
上面例子中的輸出,可以看見最近1分鍾的平均負載非常高,且遠高於最近15分鍾負載,因此我們需要繼續排查當前系統中有什麼進程消耗了大量的資源。可以通過下文將會介紹的vmstat、mpstat等命令進一步排查。
dmesg | tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.

該命令會輸出系統日誌的最後10行。示例中的輸出,可以看見一次內核的oom kill和一次TCP丟包。這些日誌可以幫助排查性能問題。千萬不要忘了這一步。
vmstat 1
$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C

vmstat(8) 命令,每行會輸出一些系統核心指標,這些指標可以讓我們更詳細的了解系統狀態。後面跟的參數1,表示每秒輸出一次統計信息,表頭提示了每一列的含義,這幾介紹一些和性能調優相關的列:
r:等待在CPU資源的進程數。這個數據比平均負載更加能夠體現CPU負載情況,數據中不包含等待IO的進程。如果這個數值大於機器CPU核數,那麼機器的CPU資源已經飽和。
free:系統可用內存數(以千位元組為單位),如果剩餘內存不足,也會導致系統性能問題。下文介紹到的free命令,可以更詳細的了解系統內存的使用情況。
si, so:交換區寫入和讀取的數量。如果這個數據不為0,說明系統已經在使用交換區(swap),機器物理內存已經不足。
us, sy, id, wa, st:這些都代表了CPU時間的消耗,它們分別表示用戶時間(user)、系統(內核)時間(sys)、空閑時間(idle)、IO等待時間(wait)和被偷走的時間(stolen,一般被其他虛擬機消耗)。
上述這些CPU時間,可以讓我們很快了解CPU是否出於繁忙狀態。一般情況下,如果用戶時間和系統時間相加非常大,CPU出於忙於執行指令。如果IO等待時間很長,那麼系統的瓶頸可能在磁碟IO。
示例命令的輸出可以看見,大量CPU時間消耗在用戶態,也就是用戶應用程序消耗了CPU時間。這不一定是性能問題,需要結合r隊列,一起分析。
mpstat -P ALL 1
$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]

該命令可以顯示每個CPU的佔用情況,如果有一個CPU佔用率特別高,那麼有可能是一個單線程應用程序引起的。
pidstat 1
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^C

pidstat命令輸出進程的CPU佔用率,該命令會持續輸出,並且不會覆蓋之前的數據,可以方便觀察系統動態。如上的輸出,可以看見兩個JAVA進程佔用了將近1600%的CPU時間,既消耗了大約16個CPU核心的運算資源。
iostat -xz 1
$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^C

iostat命令主要用於查看機器磁碟IO情況。該命令輸出的列,主要含義是:
r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫次數和每秒讀寫數據量(千位元組)。讀寫量過大,可能會引起性能問題。
await:IO操作的平均等待時間,單位是毫秒。這是應用程序在和磁碟交互時,需要消耗的時間,包括IO等待和實際操作的耗時。如果這個數值過大,可能是硬體設備遇到了瓶頸或者出現故障。
avgqu-sz:向設備發出的請求平均數量。如果這個數值大於1,可能是硬體設備已經飽和(部分前端硬體設備支持並行寫入)。
%util:設備利用率。這個數值表示設備的繁忙程度,經驗值是如果超過60,可能會影響IO性能(可以參照IO操作平均等待時間)。如果到達100%,說明硬體設備已經飽和。
如果顯示的是邏輯設備的數據,那麼設備利用率不代表後端實際的硬體設備已經飽和。值得注意的是,即使IO性能不理想,也不一定意味這應用程序性能會不好,可以利用諸如預讀取、寫緩存等策略提升應用性能。
free –m
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0

free命令可以查看系統內存的使用情況,-m參數表示按照兆位元組展示。最後兩列分別表示用於IO緩存的內存數,和用於文件系統頁緩存的內存數。需要注意的是,第二行-/+ buffers/cache,看上去緩存佔用了大量內存空間。這是Linux系統的內存使用策略,盡可能的利用內存,如果應用程序需要內存,這部分內存會立即被回收並分配給應用程序。因此,這部分內存一般也被當成是可用內存。
如果可用內存非常少,系統可能會動用交換區(如果配置了的話),這樣會增加IO開銷(可以在iostat命令中提現),降低系統性能。
sar -n DEV 1
$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^C

sar命令在這里可以查看網路設備的吞吐率。在排查性能問題時,可以通過網路設備的吞吐量,判斷網路設備是否已經飽和。如示例輸出中,eth0網卡設備,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,沒有達到1Gbit/sec的硬體上限。
sar -n TCP,ETCP 1
$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^C

sar命令在這里用於查看TCP連接狀態,其中包括:
active/s:每秒本地發起的TCP連接數,既通過connect調用創建的TCP連接;
passive/s:每秒遠程發起的TCP連接數,即通過accept調用創建的TCP連接;
retrans/s:每秒TCP重傳數量;
TCP連接數可以用來判斷性能問題是否由於建立了過多的連接,進一步可以判斷是主動發起的連接,還是被動接受的連接。TCP重傳可能是因為網路環境惡劣,或者伺服器壓力過大導致丟包。
top
$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了前面好幾個命令的檢查的內容。比如系統負載情況(uptime)、系統內存使用情況(free)、系統CPU使用情況(vmstat)等。因此通過這個命令,可以相對全面的查看系統負載的來源。同時,top命令支持排序,可以按照不同的列排序,方便查找出諸如內存佔用最多的進程、CPU佔用率最高的進程等。
但是,top命令相對於前面一些命令,輸出是一個瞬間值,如果不持續盯著,可能會錯過一些線索。這時可能需要暫停top命令刷新,來記錄和比對數據。
總結
排查Linux伺服器性能問題還有很多工具,上面介紹的一些命令,可以幫助我們快速的定位問題。例如前面的示例輸出,多個證據證明有JAVA進程佔用了大量CPU資源,之後的性能調優就可以針對應用程序進行。

閱讀全文

與linuxtcp重傳相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:419
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:189
pdf劈開合並 瀏覽:27
不能修改的pdf 瀏覽:751
同城公眾源碼 瀏覽:488
一個伺服器2個埠怎麼映射 瀏覽:297
java字元串ascii碼 瀏覽:78
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:945
安卓導航無聲音怎麼維修 瀏覽:332
app怎麼裝視頻 瀏覽:430
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491