遇到性能瓶颈的排查思路

2023-11-30 16:32:00 浏览数 (1)

top

  • vmstat
  • w
  • uptime
  • iostat

有监控的情况下,首先去看看监控大盘,看看有没有异常报警,如果初期还没有监控的情况我会按照下面步骤去看看系统层面有没有异常

1、我首先会去看看系统的平均负载,使用top或者htop命令查看,平均负载体现的是系统的一个整体情况,他应该是cpu、内存、磁盘性能的一个综合,一般是平均负载的值大于机器cpu的核数,这时候说明机器资源已经紧张了

2、平均负载高了以后,接下来就要看看具体是什么资源导致,我首先会在top中看cpu每个核的使用情况,如果占比很高,那瓶颈应该是cpu,接下来就要看看是什么进程导致的

3、如果cpu没有问题,那接下来我会去看内存,首先是用free去查看内存的是用情况,但不直接看他剩余了多少,还要结合看看cache和buffer,然后再看看具体是什么进程占用了过高的内存,我也是是用top去排序

4、内存没有问题的话就要去看磁盘了,磁盘我用iostat去查看,我遇到的磁盘问题比较少

5、还有就是带宽问题,一般会用iftop去查看流量情况,看看流量是否超过的机器给定的带宽

6、涉及到具体应用的话,就要根据具体应用的设定参数来查看,比如连接数是否查过设定值等

7、如果系统层各个指标查下来都没有发现异常,那么就要考虑外部系统了,比如数据库、缓存、存储等

TCP 参数调优

**修改 /etc/sysctl.conf 文件,增加或者修改的内容如下:

提高TCP的最大缓冲区大小

net.core.rmem_default = 126976

net.core.wmem_default = 126976

发送套接字缓冲区大小的最大值(以字节为单位)

net.core.wmem_max = 16777216

接收套接字缓冲区大小的最大值(以字节为单位)

net.core.rmem_max = 16777216

提高Linux内核自动对socket缓冲区进行优化的能力

net.ipv4.tcp_mem = 8192 87380 16777216

用来配置写缓冲的大小,第1个值为最小值,第2个值为默认值,第3个值为最大值

net.ipv4.tcp_wmem = 8192 65536 16777216

用来配置读缓冲的大小,第1个值为最小值,第2个值为默认值,第3个值为最大值

net.ipv4.tcp_rmem = 8192 87380 16777216

每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,默认为1000

net.core.netdev_max_backlog = 2500

表示socket监听(listen)的backlog上限。

backlog是socket的监听队列,当一个请求(request)尚未被处理或建立时,该请求会进入backlog,而socket server可以一次性处理backlog中的所

有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝,默认为128

net.core.somaxconn = 262144

一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh、拥塞窗口snd_cwnd,还有srtt等信息保存到dst_entry中,只要dst_entry没有失效,

下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接

net.ipv4.tcp_no_metrics_save = 0

net.ipv4.tcp_moderate_rcvbuf = 1

处于TIME_WAIT状态的连接在回收前必须等待的最小时间,改小它可以加快回收。

net.ipv4.tcp_fin_timeout = 5

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_sack = 1

当服务器需要在大量TCP连接之间切换时,会产生大量处于TIME_WAIT状态的连接。TIME_WAIT意味着连接本身是关闭的,但资源还没有释放。将net_ipv4_tcp_tw_reuse设置为1是让内核在安全时尽量回

收连接,这比重新建立新连接要便宜得多

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 10250 65000

表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数

net.ipv4.tcp_max_syn_backlog = 81920

表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000

net.ipv4.tcp_max_tw_buckets = 1600000

表示在内核放弃连接之前发送SYN ACK包的数量,默认为5

net.ipv4.tcp_synack_retries = 2

表示在内核放弃建立连接之前发送SYN包的数量,默认为4

net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_retries2 = 2

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_timestamps = 1

fs.file-max = 1024000

kernel.randomize_va_space = 1

kernel.exec-shield = 1

控制内核从物理内存移出进程,移到交换空间。该参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核疯狂的将数据移出物理内存移到swap缓存中。

vm.swappiness = 0

vm.max_map_count=2048000

注意:文件保存之后,需要注销或重启系统(reboot)才能生效。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞