服务器卡顿排查方法(Linux服务器)

文章目录

    • 一、分析思路
    • 二、详细分析方法
      • 1、排除本机自身原因
      • 2、服务器性能分析
        • (1)查看服务器的内存和服务器核数大小
        • (2)服务器的负载
      • 3、虚拟机分析
      • 4、数据库分析(MySql)
        • (1)进程列表
        • (2)最大连接数
        • (3)连接超时
        • (3)DNS反向解析
        • (4)表高速缓存
        • (5)慢查询日志

一、分析思路

  1. 排除本机自身原因
  2. 服务器性能分析
  3. 虚拟机分析
  4. 数据库分析

二、详细分析方法

1、排除本机自身原因

查看服务器的网络情况可以下载一个大型文件基本就可以确定网络情况了。或者使用站长工具测试网站速度。

在这里插入图片描述

2、服务器性能分析

(1)查看服务器的内存和服务器核数大小

①查看服务器内存大小

cat /proc/meminfo | grep MemTotal

②查看服务器核数

总核数 = 物理CPU个数 * 每个物理CPU的核数

查看CPU的个数:

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

查看每个CPU中core的个数

cat /proc/cpuinfo| grep "cpu cores"| uniq

(2)服务器的负载

在确定CPU的内存和CPU核数后,就可以进一步观察服务器的负载

Linux的负载高,主要是由于 CPU使用、内存使用 引起的。其中任何一项的急剧增加,都会使得服务器的负载急剧升高

使用top命令查看服务器的资源使用情况,主要分析CPU和内存的使用情况(top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,默认5秒刷新一下进程列表,所以类似于 Windows 的任务管理器。)
在这里插入图片描述

第一行:

top - 14:50:58 up 16:46,  2 users,  load average: 1.15, 0.63, 0.44
  • 14:50:58:系统当前时间
  • up 16:46 :系统开机到现在经过了2天
  • 2 users:当前1用户在线
  • load average: 1.15, 0.63, 0.44:系统1分钟、5分钟、15分钟的CPU负载信息.

备注:load average后面三个数值的含义是最近1分钟、最近5分钟、最近15分钟系统的负载值。这个值的意义是,单位时间段内CPU活动进程数。如果你的机器为单核,那么只要这几个值均<1,代表系统就没有负载压力,如果你的机器为N核,那么必须是这几个值均<N才可认为系统没有负载压力。

CPU利用率:显示的是程序在运行期间实时占用的CPU百分比;

第二行解释:

Tasks: 147 total,   1 running, 146 sleeping,   0 stopped,   0 zombie
  • 147 total,:当前有108个任务
  • 1 running:1个任务正在运行
  • 46 sleeping,:107个进程处于睡眠状态
  • 0 stopped:停止的进程数
  • 0 zombie:僵死的进程数

第三行解释:

Cpu(s):  1.7%us,  0.2%sy,  0.0%ni, 95.6%id,  2.3%wa,  0.1%hi,  0.1%si,  0.0%st
  • 1.7%us:用户态进程占用CPU时间百分比
  • 0.2%sy,:内核占用CPU时间百分比
  • 0.0%ni:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思
  • 95.6%id:空闲CPU时间百分比
  • 2.3%wa:等待I/O的CPU时间百分比
  • 0.1%hi:CPU硬中断时间百分比
  • 0.1%si:CPU软中断时间百分比

第四行解释:

Mem:  32959108k total, 32783520k used,   175588k free,   291084k buffers
  • 32959108k total:物理内存总数
  • 32783520k used: 使用的物理内存
  • 175588k free:空闲的物理内存
  • 291084k buffers:用作缓存的内存

第五行解释:

Swap:  4194296k total,      148k used,  4194148k free, 10365856k cached
  • 4194296k total:交换空间的总量
  • 148k used: 使用的交换空间
  • 4194148k free:空闲的交换空间
  • 10365856k cached:缓存的交换空间

我个人的理解是:当us的百分比小于50%时,是不需要去考虑服务器的配置问题的,如果服务器的us百分比长时间在70%以上时,可以考虑加强服务器的硬件配置。

3、虚拟机分析

使用top指令查看虚拟机的内存占用情况,有时候可以发现虽然虚拟机占用内存的百分比不大却有明显的上限值,我们就需要去查看虚拟机的配置情况。

解决方法(以tomcat为例):

在这里插入图片描述
具体的数值根据实际情况而定。

4、数据库分析(MySql)

(1)进程列表

排除高并发因素先要找到导致CPU过高的SQL
在这里插入图片描述

mysql> SHOW PROCESSLIST;
查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引。+----+------+-----------------+------+---------+------+-------+------------------+
| Id | User | Host            | db   | Command | Time | State | Info             |
+----+------+-----------------+------+---------+------+-------+------------------+
| 11 | root | localhost:56919 | test | Query   |    0 | NULL  | SHOW PROCESSLIST |
+----+------+-----------------+------+---------+------+-------+------------------+
1 row in set
字段描述
Id进程标识,Kill时使用。
User当前用户权限范围内的SQL语句
Host从哪个IP的端口发出的,用来追踪出问题语句的用户。
db进程目标连接的是哪个数据库
Command显示当前连接执行的命令:休眠sleep/查询query/连接connect/
Time状态持续时间秒数
State使用当前连接的SQL语句的状态
Info显示SQL语句

休眠的线程

一般而言,休眠Sleep连接过多会严重消耗MySQL服务器资源(CPU和内存),可能会导致MySQL崩溃。

临时文件大小

若进程列表中出现大量Copying to tmp table on disk状态,则明显是由于临时表过大导致MySQL将临时表写入磁盘而影响了整体性能。可通过调整tmp_table_size临时表大小来解决,MySQL中tmp_table_size默认是16MB。

mysql> SHOW VARIABLES LIKE "%tmp_table_size%";
+----------------+----------+
| Variable_name  | Value    |
+----------------+----------+
| tmp_table_size | 18874368 |
+----------------+----------+
1 row in set

临时设置临时表大小

mysql> SET GLOBAL tmp_table_size=33554432;

(2)最大连接数

查看MySQL连接数,看看是否超过了MySQL设置的连接数。

show variables like '%max_connections%'; 查看最大连接数
show status like 'Threads%';             当前连接的使用情况

在这里插入图片描述

  • Threads_connected—打开的连接数

  • Threads_running—这个数值指的是激活的连接数,这个数值一般远低于connected数值

如果最大连接数的值太小可以根据实际情况进行修改,一般修改为1000即可,设置方法有两种:

  1. 临时设置,重启服务后将失效

    在这里插入图片描述

  2. 修改数据库配置文件

    在/etc/my.cnf 文件的[mysqld]下增减一行:
    max_connections = 1000
    

(3)连接超时

wait_timeout用于设置SQL语句睡眠连接超时秒数,若连接超时则会被MySQL自然终止。

如果wait_timeout设置过大MySQL中会存在大量的SLEEP进程无法及时释放,会拖累系统性能。若wait_timeout过小,可能会遭遇MySQL has gone away之类的问题。通常而言,wait_timeout设置为10个小时是最佳选择。

MySQL默认wait_timeout为28800秒即8小时,意味着一个连接的空闲时间若超过8小时则会自动断开连接,然后连接池却认为该连接还是有效的。

mysql> SHOW VARIABLES LIKE "%wait_timeout%";
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| innodb_lock_wait_timeout | 50       |
| lock_wait_timeout        | 31536000 |
| wait_timeout             | 28800    |
+--------------------------+----------+
3 rows in set

(3)DNS反向解析

MySQL数据库收到一个网络连接后,首先拿到对方的IP地址,然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名。用主机名在权限系统里面进行权限判断。反向DNS解析是耗费时间的,有可能让用户感觉起来很慢。甚至有的时候,反向解析出来的主机名并没有指向这个IP地址,这时候就无法连接成功了。 可以在配置文件里面禁止MySQL进行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可:

skip-name-resolve (windows与linux下一样的)

(4)表高速缓存

show global status like 'open%tables%';查看打开的表的数量:

在这里插入图片描述

  • open_tables:是当前在缓存中打开表的数量。

  • opened_tables:是mysql自启动起,打开表的数量。

  • 当Opened_tables数值非常大,说明cache太小,导致要频繁地open table,可以查看下当前的table_open_cache设置:

  • show variables like ‘table_open_cache’; 查看缓存的上限值
      在这里插入图片描述

设置table_open_cache的值有两种方式(如果是4G左右内存的服务器,建议设为2048):

1.临时设置,重启服务后将失效

set global table_open_cache=2048;

2.修改数据库配置文件

在/etc/my.cnf 文件的[mysqld]下增减一行:
table_open_cache = 2048

(5)慢查询日志

打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行EXPLAIN分析。

导致CPU过高多数是GROUP BY、ORDER BY排序问题锁导致,然后慢慢进行优化改进。比如优化INSERT语句、优化GROUP BY语句、优化ORDER BY语句、优化JOIN语句等。

查看慢查询日志开启状态

mysql> SHOW VARIABLES LIKE "%slow_query_log%";
+---------------------+-------------------------------------------------------------+
| Variable_name       | Value                                                       |
+---------------------+-------------------------------------------------------------+
| slow_query_log      | OFF                                                         |
| slow_query_log_file | \MySQL\data\slow.log |
+---------------------+-------------------------------------------------------------+
2 rows in set

临时开启慢查询日志

mysql> SET GLOBAL slow_query_log = 1;
获取慢查询日志的存放路径mysql> SHOW VARIABLES LIKE "slow_query_log_file
慢查询中的SQL是由long_query_time控制的mysql> SHOW VARIABLES LIKE "long_query_time%";
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set

临时修改全局的长查询时间微秒限制

mysql> SET GLOBAL long_query_time=4;

设置日志存储方式

mysql> SHOW VARIABLES LIKE "%log_output%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set
日志存储方式描述
FILE将日志存入文件
TABLE将日志存入数据库,日志信息默认写入mysql.slow_log表中。

临时设置日志存储方式

mysql> SET GLOBAL log_output="FILE,TABLE";

查询有多少条慢查询记录

mysql> SHOW GLOBAL STATUS LIKE "%Slow_queries%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45423.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红队常用命令速查

下载方式&#xff1a;干货|红队常用命令速查https://mp.weixin.qq.com/s/kQyj3aumrcUYSYV_I5pdqQ

一文练就命令行高手: Linux命令大全

文章目录 1 前言2 Linux文件系统简介3 文件管理相关命令3.1 路径切换: cd命令3.2 查看文件列表: ls命令3.3 新建文件/文件夹: mkdir命令3.4 删除文件: rm命令3.5 拷贝复制: cp命令3.6 移动move: mv命令3.7 文件查找: find命令3.8 更改文件权限: chmod命令 4 文本内容操作命令4.…

分享巧记Linux命令的方法

最近有些学弟经常私信问我说&#xff0c;他们自己是Linux方面的小白&#xff0c;对于Linux的命令了解十分的少&#xff0c;虽然每次跟着我推荐的学习视频教程可以进行操作&#xff0c;但是离开了视频&#xff0c;就又是两眼抓瞎&#xff0c;什么也想不起来。不知道怎么样通过命…

【玩转Linux】史上最详细的Linux命令大全和线上问题排查手册

文章目录 一、基本命令1、重启2、关机3、清屏4、显示当前的工作目录5、帮助命令6、显示目录下的文件和子目录&#xff08;ls&#xff09; 二、文件操作1、新建文件2、新建文件夹3、复制文件或目录4、删除文件或目录5、移动文件6、查看文件内容7、文件权限8、改变文件或目录的权…

开发者友好的Linux常见命令整理

系统本身 uname -a # 查看内核/操作系统/CPU信息 cat /etc/redhat-release 查看服务器版本 cat /proc/cpuinfo # 查看CPU信息 hostname # 查看计算机名 lspci -tv # 列出所有PCI设备 lsusb -tv # 列出所有USB设备 lsmod # 列出加载的内核模块 env # 查看环境变量 查看…

打听同事工资,我被离职了

薪资是职场红线。 你所在的公司可以自由交流薪资吗&#xff1f; 最近&#xff0c;苹果公司宣布员工之间可以公开讨论薪资、工作时间和环境&#xff0c;引发了网友对秘薪制的讨论。同一家公司同一个岗位&#xff0c;有人拿1万月薪&#xff0c;有人却拿1.5万&#xff0c;在互联…

某公司招了一个大专生,候选人要一万月薪,HR给申请一万二,HR领导说:给一万三!...

无良公司看多了&#xff0c;不禁让人怀疑&#xff1a;这个世界上还有好公司和好hr吗&#xff1f; 来看看这位hr的故事&#xff1a; 最近我们招了一个大专生&#xff0c;5年经验。他的工资是7000&#xff0c;候选人想要10000&#xff0c;我给申请了12000&#xff0c;结果审批不通…

谷歌软件工程师基本年薪达 71.8 万美元,此外还有股权和奖金!

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 树大好乘凉&#xff0c;大厂之下&#xff0c;员工的薪酬也很「可观」。 7 月 19 日&#xff0c;据 Business Insider 报道&#xff0c;2022 年谷歌员工总薪酬中位数为 279802 美元&…

为什么你的年薪只是别人的月薪? 你需要了解这些...

2019 年 5 月 26 - 27 日&#xff0c;由中国 IT 社区 CSDN 与数字经济人才发展中心联合主办的第一届 CTA核心技术及应用峰会将在杭州国际博览中心召开。近 500 名开发者将齐聚于此&#xff0c;共同交流探讨机器学习和知识图谱的技术及行业落地趋势。 会议将聚焦机器学习和知识图…

同一条好友邀请信息给大量的人发,会导致领英账号被封吗?

做外贸的领英新人经常有一个问题&#xff1a;领英上添加好友时&#xff0c;同一条好友邀请信息给大量的人发&#xff0c;会导致领英账号被封吗&#xff1f; 这是一个被一部分人所忽略&#xff0c;也在被一部分人所担心的问题&#xff0c;因为很多领英新手都是在复制粘贴发送相…

腾讯短信平台对接

水一篇文章。。。 腾讯短信平台网址&#xff1a;https://console.cloud.tencent.com/ 微信扫码登录后搜索短信服务 点击添加应用 得到应用 创建签名很严格但不复杂&#xff0c;按照正常流程即可 sdk下载列表。 到此为止&#xff0c;介绍完毕

和中国移动对接短信平台

项目需求 2017年4月12日&#xff0c;正式收到领导通知打算和中国移动对接短信平台&#xff0c;要做的项目当然就是给人发短信&#xff0c;这个短信平台和第三方提供的短信接口不同&#xff0c;这个平台可以二次开发&#xff0c;别人收到短信进行回复的话&#xff0c;我这边可以…

国际短信平台接口调用的方法步骤,简单5步快速教程

如果您需要使用国际短信平台来满足您的业务需求&#xff0c;那么您需要了解短信平台接口调用的方法步骤。 接口调用是指您的应用程序通过网络接口与短信平台进行通信&#xff0c;从而实现向全世界发送短信的功能。 下面是国际短信平台接口调用的方法步骤&#xff1a; 第一步&a…

短信宝接入发送短信实测 Java

1丶注册短信宝 2 代码分为授权跟参数实体 授权实体 Data public class SmsBaoAuthorization {//http://api.smsbao.com/sms private String url;//在短信宝注册的用户名private String username;//在短信宝注册的密码 private String password; } 参数实体 Data pub…

采用API方式发送,接收短信(嘉信)

API方式: 首选要在jx01移动代理服务器中进行如下配置 系统管理-->接口管理-->短信接口模块增加如下配置信息 接口编码&#xff1a; 接口名称&#xff1a; 接口类型&#xff1a;DB接口 API接口 WEB SERVICE接口 SOCKET接口 通信能力&#xff1a;短信 WAP 业务类型…

免费短信接口

话不多说&#xff0c;自己短信量太多了&#xff0c;快过期了&#xff0c;提供自己的免费云短信接口和测试窗口&#xff0c;想用的直接调我接口就行。 ps&#xff1a;不打马赛克不能发出来图&#xff1b;参数传递的id说一下&#xff0c;注册就传1173965&#xff0c;登录传&#…

解决微信“聊天界面中的新消息通知”设置按钮不见了问题

原因 解决微信“聊天界面中的新消息通知”设置按钮不见了问题 解决方法 开启“接收新消息通知”后&#xff0c;“聊天界面中的新消息通知”设置按钮就会出现

Android使用通知(Notification)——方法过时的解决办法

今天照着《Android第一行代码第二版-郭霖》把通知那部分的代码实现了一下&#xff0c;结果发现 Notification notification new NotificationCompat.Builder(this)过时了。 我查了一下开发者文档&#xff0c;根据文档可以看到public Builder (Context context)已经过时了&…

企业微信客户群事件通知

企业微信: https://work.weixin.qq.com/ 概述 企业微信在推送消息给企业时&#xff0c;会对消息内容做AES加密&#xff0c;以XML格式POST到企业应用的URL上。 企业在被动响应时&#xff0c;也需要对数据加密&#xff0c;以XML格式返回给企业微信。 通知回调地址配置 获取access…

Android APP被关闭后无法收到推送消息(尝试)

1. Android端进程被杀死后&#xff0c;目前自带的保护后台接收消息活跃机制。暂时没有什么好的机制保持任何情况下都活跃 文章参考&#xff1a;http://blog.csdn.net/marswin89/article/details/50917098 android原生系统用home键杀进程可以起来&#xff0c;如果是强行停止…