一.Linux巡检
总括 | |
top | 动态地查看系统中各个进程的资源占用状况。 |
uptime | 查看系统运行时间、负载情况。 |
df -h | 查看文件系统空间使用情况。 |
free -m | 查看内存使用情况。 |
netstat -ant | 查看当前网络连接情况。 |
du -sh *|sort -rh | 查看应用服务器下面的日志大小情况。 (要cd到logs或需要检查的文件对应目录中) |
1.top
(a)top
作用:动态地查看系统中各个进程的资源占用状况。
在服务器中输入top即可启动该命令。启动后,会显示一个动态更新的表格。
注意:top命令显示的是动态更新的信息,因此它可能会占用一定的CPU资源,可能会影响到系统的性能。
top表格各列字段及含义 | |
PID | 进程ID |
USER | 进程所有者 |
PR | 进程优先级 |
NI | nice值(优先级调整值) |
VIRT | 进程使用的虚拟内存总量,单位kb |
RES | 进程使用的、未被换出的物理内存大小,单位kb |
SHR | 共享内存大小,单位kb |
S | 进程状态(如R表示正在运行,S表示休眠等) |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 启动进程的命令名/命令行 |
主要观察服务器的CPU使用状况,过高的时候代表系统可能无法正常运行。
(b) top -o %CPU
按CPU使用率排序
(c)top -o %MEM
按内存使用率排序
(d)交互命令
在top命令运行时,可以按以下键进行交互 | |
P | 按CPU使用率排序(等同于:top -o %CPU) |
M | 按内存使用量排序(等同于:top -o %MEM) |
N | 以PID顺序排序 |
T | 按时间/累计时间排序 |
k | 终止一个进程(需要输入进程ID) |
r | 改变进程优先级(需要输入进程ID和优先级) |
q | 退出top |
f(F) | 进入字段管理界面,用于选择显示的字段 |
o(O) | 改变字段的排序顺序(升序/降序) |
h(?) | 显示帮助信息 |
1 | 显示每个核心的cpu使用情况 |
示例:在top命令运行时,按1如下图可以看到每个核心的cpu使用情况。
2.uptime
作用:查看系统运行时间、负载情况。
17:25:15 | up 505 days, 5:30 | 1 user | load average: 0.17, 0.41, 0.46 |
当前系统时间 | 系统已开机运行了多长时间 即:已运行505天5小时30分钟 | 当前登录用户数:1 即:活动用户 | 过去 1分钟、5分钟、 15 分钟内可用的系统负载的平均值 |
3.df -h
作用:查看文件系统空间使用情况。
这个大小跟前一个月的空间进行比对,大概就能知道一个月增长了多少空间。但是一般超过80%以上就要开始关注了,空间一旦不足,会影响系统使用。
4.free -m
作用:查看内存使用情况。
如果发现空闲内存很小,可以通过: ps aux --sort=-%mem 这个命令,将占用内存高的部分给打印出来。
5.netstat -ant
作用:查看当前网络连接情况。
这几个端口可以看到处于监听状态,正常运行。
6.du -sh *|sort -rh
作用:查看应用服务器下面的日志大小情况。(要cd到logs或需要检查的文件对应目录中)
可以由大到小排序,如果发现哪一天的日志大小远超平均大小,这个时候要注意了,查看下这个日志上的报错信息,看下是哪里出问题了。
注:快速查询所有日志:find / -name "*.log"
二.MySQL数据库巡检
数据库监听端口:netstat -ano|grep 3306
1.数据库版本
select version();
2.数据库运行时长
SHOW STATUS LIKE "Uptime";
3.数据文件路径
SHOW VARIABLES LIKE 'datadir';
4.数据库大小(MB)
SELECT
table_schema AS `Database`,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`
FROM
information_schema.TABLES
GROUP BY
table_schema;
注:`Database`与 `Size (MB)`原先使用的是单引号,但是实际使用有发生报错,改为了反引号
5.数据库最大(并发)连接数
show variables like '%max_connections%';
6.数据库最大已连接次数、最长连接时间
show status like 'max_used_connections%';
7.当前连接数
show status like '%Threads_connected%';
8.数据库实际连接情况
select client_ip,count(client_ip) as client_num from (select substring_index(host,':' ,1) as client_ip from information_schema.processlist ) as connect_info group by client_ip order by client_num desc;
9.锁等待检查
show engine innodb status;
查看最近死锁的日志,Status里有数据的话可以copy出来,去分析有lock的死锁语句
10.检查是否开启log-bin日志
(a)show variables like 'log_bin';
看到 Value = ON 时,这表示MySQL的二进制日志(binlog)功能已经被启用,但是并没有直接显示二进制日志文件的路径。ON 仅仅是一个标志,表示binlog是活跃的。要找到实际的binlog文件路径和文件名,可能需要查看MySQL的配置文件(如 my.cnf 或 my.ini),因为在那里通常会指定binlog的基本路径和前缀。
(b)当前正在使用的binlog文件的完整路径和名称
SHOW BINARY LOGS;
三.SQLServer数据库巡检
1.日志大小及空间占用率使用情况
常用:DBCC SQLPERF(LOGSPACE);
较标准:DBCC SQLPERF(LOGSPACE, <database_name>)
2.表空间及数据文件使用情况
SELECT
name AS [File Name],
size/128 AS [Size in MB],
FILEPROPERTY(name, 'SpaceUsed')/128 AS [Space Used in MB],
(size - FILEPROPERTY(name, 'SpaceUsed'))/128 AS [Available Space in MB]
FROM
sys.database_files;
数据文件:3818MB
3.获取缓存命中率(BufferCacheHitRatio)
SELECT (a.cntr_value * 1.0 / b.cntr_value) * 100.0 [BufferCacheHitRatio]
FROM (SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio'
AND object_name = CASE WHEN @@SERVICENAME = 'MSSQLSERVER'
THEN 'SQLServer:Buffer Manager'
ELSE 'MSSQL$' + rtrim(@@SERVICENAME) +
':Buffer Manager' END ) a
CROSS JOIN
(SELECT * from sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio base'
and object_name = CASE WHEN @@SERVICENAME = 'MSSQLSERVER'
THEN 'SQLServer:Buffer Manager'
ELSE 'MSSQL$' + rtrim(@@SERVICENAME) +
':Buffer Manager' END ) b;
缓存命中率100%,缓存大小合适。
4.找出执行最慢的SQL语句
SELECT TOP 20
total_worker_time / 1000 AS [总消耗CPU 时间(ms)],
execution_count [运行次数],
qs.total_worker_time / qs.execution_count / 1000 AS [平均消耗CPU 时间(ms)],
last_execution_time AS [最后一次执行时间],
max_worker_time / 1000 AS [最大执行时间(ms)],
SUBSTRING(qt.text, qs.statement_start_offset / 2 + 1,
(CASE WHEN qs.statement_end_offset = -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2 + 1
) AS [使用CPU的语法],
qt.text [完整语法],
dbname = DB_NAME(qt.dbid),
OBJECT_NAME(qt.objectid, qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count > 1 ORDER BY total_worker_time DESC;
注意:这个查询可能会返回非常大的SQL文本,特别是当qt.text包含完整的存储过程或函数时。如果您只对消耗CPU时间的那部分SQL感兴趣,可以只关注[使用CPU的语法]列。
四.Oracle数据库巡检
1.oracle进程数
(a)最大进程数
SELECT value AS max_processes
FROM v$parameter
WHERE name = 'processes';
(b)实际进程数
SELECT COUNT(*) AS process_count FROM v$process;
2.游标数
(a)游标数参数
SELECT name, value
FROM v$parameter
WHERE name = 'open_cursors';
(b)当前的游标数
SELECT COUNT(*) AS "当前游标数"
FROM V$OPEN_CURSOR;
3.密码有效期
select * from dba_profiles s where s.profile='DEFAULT' AND resource_name like 'PASSWORD%';
4.缓存命中率
查看缓冲区命中率(如果命中率低于90%则需加大数据库参数db_cache_size)
SELECT a.VALUE + b.VALUE logical_reads,
c.VALUE phys_reads,
round(100 * (1 - c.value / (a.value + b.value)), 4) hit_ratio
FROM v$sysstat a, v$sysstat b, v$sysstat c
WHERE a.NAME = 'db block gets'
AND b.NAME = 'consistent gets'
AND c.NAME = 'physical reads';
5.性能最差的SQL
SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC)
WHERE ROWNUM<100;
注意:以上均以作者君使用到的项目、产品为示例,仅做参考。可根据自身情况,修改语句中的视图、表与字段,进行相关查询。