[www@efx-11 bin]$ top -b -n 1 | sed -n 1,5p
top - 19:39:55 up 33 days, 8:41, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 275 total, 2 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.6 us, 1.6 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8149848 total, 238896 free, 5547480 used, 2363472 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2042316 avail Mem
1. top -b -n
1: 这个命令是用来查看系统资源使用情况,包括进程数、CPU利用率、内存使用率等等。
建议:可以定期使用top命令来监控系统资源使用情况,及时发现问题。
2. top - 19:39:55 up 33 days, 8:41, 3 users, load average: 0.00, 0.00, 0.00:
19:39:55:当前系统时间
up 33 days, 8:41:系统运行时间,33天8小时41分
3 users:当前在线用户数
load average: 0.00, 0.00, 0.00:1分钟、5分钟、15分钟的平均负载。
指标域值提示:平均负载值越高,说明系统压力越大,如果超过CPU核心数,则表示系统超负荷运行。load average长期超过CPU数的2倍时,系统负载过高。
建议:如果平均负载值持续高于CPU核心数的话,需要考虑优化系统配置或增加硬件资源。
3. Tasks: 275 total, 2 running, 169 sleeping, 0 stopped, 0 zombie:
total:进程总数
running:正在运行的进程数
sleeping:睡眠状态的进程数
stopped:停止的进程数
zombie:僵尸进程数
建议:若进程数超过系统允许的最大进程数,会导致系统无法响应。同时也可以发现是否有僵尸进程等问题。
4. %Cpu(s): 1.6 us, 1.6 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st:
us:用户空间占用CPU的百分比
sy:内核空间占用CPU的百分比
ni:用户进程空间内改变过优先级的进程占用CPU的百分比
id:空闲CPU百分比
wa:等待输入输出的CPU时间百分比
hi:CPU处理硬中断的时间百分比
si:CPU处理软中断的时间百分比
st:虚拟机失去CPU时间的百分比
指标域值提示:当us、sy值过高时,说明CPU资源占用过高,CPU使用率长期超过70%时,说明CPU资源紧张,建议优化进程或升级CPU
建议:通过查看CPU使用情况可以及时发现CPU资源占用过高的问题,进行优化。
5. KiB Mem : 8149848 total, 238896 free, 5547480 used, 2363472 buff/cache:
total:物理内存总量
free:可用内存
used:已用内存
buff/cache:缓存的内存量
指标域值提示:当可用内存小于10%时,会导致系统变慢或崩溃,需要考虑增加内存资源。
建议:当前物理内存使用率较高,建议检查是否存在内存泄漏或优化进程;交换空间未使用。
6. KiB Swap: 0 total, 0 free, 0 used. 2042316 avail Mem:
total:交换分区总量
free:可用交换分区
used:已用交换分区
avail Mem:可用内存
指标域值提示:如果系统频繁地进行交换,说明内存资源不足,需要考虑增加内存资源。
建议:通过查看swap使用情况可以及时发现内存资源占用过高的问题,进行优化。
Linux服务器监控的命令:
1. top:查看系统资源使用情况
2. free:查看内存使用情况
3. vmstat:查看系统资源使用情况
4. iostat:查看磁盘IO使用情况
5. netstat:查看网络连接状态
6. sar:查看系统性能指标历史数据
7. ifstat:查看网络接口流量
8. htop:类似于top,但是使用更加方便
[www@efx-11 bin]$ df -hPT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 1008K 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 97G 78G 20G 81% /
/dev/sda1 xfs 1014M 137M 878M 14% /boot
tmpfs tmpfs 796M 0 796M 0% /run/user/1001
tmpfs tmpfs 796M 0 796M 0% /run/user/1002
文件系统:指当前系统中的文件系统名称。
类型:指当前文件系统的类型,如ext4、xfs等。
容量:指当前文件系统的总容量,以GB或TB为单位。
已用:指当前文件系统已经使用的容量,以GB或TB为单位。
可用:指当前文件系统还可以使用的容量,以GB或TB为单位。
已用%:指当前文件系统已经使用的容量占总容量的百分比。
挂载点:指当前文件系统挂载的位置。
指标域值提示:
- 容量和已用指标应该根据具体情况而定,已用%指标应该保持在70%以下,否则可能会影响系统性能。
当前指标参数建议:
- /dev/mapper/centos-root文件系统已经使用了81%的容量,建议清理一些不必要的文件或扩容该文件系统。
- /dev/sda1文件系统已经使用了14%的容量,可用容量还比较充足。
[www@efx-11 bin]$ ps -ef |grep 8888
www 14596 13232 0 19:32 pts/2 00:00:00 grep --color=auto 8888
www 26204 1 0 7月06 ? 00:07:04 /app/jdk1.8.0_371/jre/bin/java -Djava.util.logging.config.file=/app/tomcat_8888/apache-tomcat-9.0.75/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /app/tomcat_8888/apache-tomcat-9.0.75/bin/bootstrap.jar:/app/tomcat_8888/apache-tomcat-9.0.75/bin/tomcat-juli.jar -Dcatalina.base=/app/tomcat_8888/apache-tomcat-9.0.75 -Dcatalina.home=/app/tomcat_8888/apache-tomcat-9.0.75 -Djava.io.tmpdir=/app/tomcat_8888/apache-tomcat-9.0.75/temp org.apache.catalina.startup.Bootstrap start
[www@efx-11 bin]$ lsof -p 26204 | wc -l
166
lsof是一个列出当前系统打开文件的命令,
-p参数表示显示指定进程id的相关信息,26204是进程id。
wc命令是计算给定文件的行数、字数、字符数等信息,-l参数表示只计算行数。
根据查询结果,目标进程打开了166个文件。这个值是否正常需要根据具体情况来判断,如果是一个Web服务进程,可能会有很多打开的文件,但如果是一个普通的用户进程,这个值可能就偏高了。 建议可以查看某个Web服务进程的文件打开数目,命令为lsof -p <进程id> | wc -l,也可以查看系统中打开文件数目最多的前几个进程,命令为lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head。
[www@efx-11 bin]$ whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/local/java /usr/share/java /usr/local/java/jdk1.8.0_151/bin/java /usr/local/java/jdk1.8.0_151/jre/bin/java /usr/share/man/man1/java.1.gz
[www@efx-11 bin]$ pwd
/usr/local/java/jdk1.8.0_151/bin
[www@efx-11 bin]$ jstat -gc 26204
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
9216.0 2560.0 0.0 2357.5 134656.0 57920.6 137216.0 48426.6 74496.0 70796.4 9216.0 8496.2 55 0.657 3 0.284 0.940
上面的参数是通过运行命令jstat -
获取的,用于监控Java虚拟机的垃圾回收情况。下面是各个参数的含义解析:
- S0C: 年轻代中第一个幸存区的容量 (字节)
- S1C: 年轻代中第二个幸存区的容量 (字节)
- S0U: 年轻代中第一个幸存区的使用量 (字节)
- S1U: 年轻代中第二个幸存区的使用量 (字节)
- EC: 年轻代的容量 (字节)
- EU: 年轻代的使用量 (字节)
- OC: 老年代的容量 (字节)
- OU: 老年代的使用量 (字节)
- MC: 方法区(Metaspace)的容量 (字节)
- MU: 方法区(Metaspace)的使用量 (字节)
- CCSC: 压缩类空间的容量 (字节)
- CCSU: 压缩类空间的使用量 (字节)
- YGC: 年轻代垃圾回收次数
- YGCT: 年轻代垃圾回收消耗时间 (秒)
- FGC: 老年代垃圾回收次数
- FGCT: 老年代垃圾回收消耗时间 (秒)
- GCT: 垃圾回收总消耗时间 (秒)
指标域值提示是根据具体应用场景和性能需求来确定的,不同的应用可能有不同的指标域值。一般来说,以下是一些常见的指标域值提示:
- 年轻代使用率(EU/EC):建议保持在 50% 以下,超过 70% 可能需要调整年轻代大小。
- 老年代使用率(OU/OC):建议保持在 70% 以下,超过 90% 可能需要调整老年代大小。
- 方法区使用率(MU/MC):建议保持在 70% 以下,超过 90% 可能需要调整方法区大小。
根据当前参数,可以给出一些建议:
- 年轻代使用率为 44.23%(EU/EC),处于合理范围内。
- 老年代使用率为 54.95%(OU/OC),也处于合理范围内。
- 方法区使用率为 92.35%(MU/MC),超过了建议的范围,可能需要调整方法区大小。
建议中的查询参数可以通过调整Java虚拟机的启动参数来实现。具体来说,可以使用-XX:MaxMetaspaceSize
参数来调整方法区的大小。例如,可以尝试增大方法区的大小,如-XX:MaxMetaspaceSize=256m
,然后重新运行应用程序进行测试。根据实际情况,可能还需要调整其他相关参数以达到最佳性能。请注意在调整参数时要谨慎,建议先在测试环境进行验证。
- S0C、S1C、EC、OC、MC、CCSC:这些是堆内存大小相关的参数,需要根据具体应用场景进行调整。如果应用程序经常出现OOM(内存溢出),需要适当增大堆内存大小。但是过大的堆内存会导致垃圾回收时间过长,应该避免过大。
- YGC、YGCT、FGC、FGCT、GCT:这些是垃圾回收相关的参数,需要根据具体应用场景进行调整。如果垃圾回收时间过长,应该增大堆内存大小或者调整垃圾回收算法(例如使用G1算法)。
当前指标参数建议: 根据上面的参数,可以看出当前应用程序的堆内存大小为 262144KB,其中年轻代大小为 128MB,老年代大小为 128MB。当前应用程序经历了 55 次年轻代垃圾回收、3 次老年代垃圾回收,垃圾回收总时间为 0.94 秒。
根据上面的参数,可以看出当前应用程序的堆内存大小为 262144KB,因此建议使用 jstat -gc pid 命令查询进程号为 pid 的应用程序的垃圾回收信息。
[www@efx-11 ~]$ cd /usr/local/java/jdk1.8.0_151/bin/
[www@efx-11 bin]$ ps -ef |grep 8998
www 17303 17202 0 19:58 pts/3 00:00:00 grep --color=auto 8998
[www@efx-11 bin]$ ps -ef |grep 8999
www 17309 17202 0 19:58 pts/3 00:00:00 grep --color=auto 8999
www 26204 1 0 7月06 ? 00:07:06 /application/jdk1.8.0_371/jre/bin/java -Djava.util.logging.config.file=/application/tomcat_8999/apache-tomcat-9.0.75/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /application/tomcat_8999/apache-tomcat-9.0.75/bin/bootstrap.jar:/application/tomcat_8999/apache-tomcat-9.0.75/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat_8999/apache-tomcat-9.0.75 -Dcatalina.home=/application/tomcat_8999/apache-tomcat-9.0.75 -Djava.io.tmpdir=/application/tomcat_8999/apache-tomcat-9.0.75/temp org.apache.catalina.startup.Bootstrap start
[www@efx-11 bin]$ /jmap -J-d64 -dump:format=b,file=/application/dumpfile 26204
-bash: /jmap: 没有那个文件或目录
[www@efx-11 bin]$ ./jmap -J-d64 -dump:format=b,file=/application/26204_dumpfile 26204
Dumping heap to /application/26204_dumpfile ...
Heap dump file created
jmap是Java虚拟机提供的一个命令行工具,用于生成Java堆转储快照。通过jmap可以获取Java堆的详细信息,包括对象的数量、大小和分布等。
对于生产环境中的Java虚拟机,建议在进行堆转储操作前先备份相关数据,并在合适的时间段进行操作,以避免对系统性能产生过大影响。
cat /application/26204_dumpfile
> 很多,会刷屏
java/time/format/DateTimeFormatterBuildeJ"bPjava.net.CookiePolicyI▒m▒RuntimeAttributePropertyInfoImpl.javJ▒▒pcarryReduceJ▒http://www.oasis-open.org/committees/entity/release/1.0/catalog.rnJi▒:pmaxConcurrenJi▒▒▒xercesImpl-*.jarJi▒▒(Lorg/aspectj/weaver/patterns/NoTypePattern;Ljava/lang/Object;)Ljava/lang/Object;Jin▒P()Lorg/springframework/boot/actuate/metrics/web/client/DefaultRestTemplateExchangeTagsProvider;Ji"P(Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/ReferenceTypeJi׀jsonFactoryDe▒PMethod org/springframework/boot/web/context/ConfigurableWebServerApplicationContext.containsLocalBean(Ljava/lang/String;)Z is abstracJhv▒classResourceJ▒▒(Ljava/security/Provider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>;)JhJ▒▒TLSv1.1Jh▒▒unwrapInvocationTargetExceptionJ ▒M`(Ljavax/xml/namespace/QName;Ljava/lang/String;Ljava/util/Map;Lcom/sun/xml/internal/ws/policy/sourcemodel/ModelNode$Type;ZZ)I▒▒▒content-rangeJi▒▒▒org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler$AbstractEmitterSubscribeJi▒%`afterFilterJ▒ p(Ljava/security/cert/Certificate;Ljava/util/Collection;)VJiV3▒org/aspectj/weaver/CompressingDataOutputStreamJiI9▒Listener must not be null!J
www@DESKTOP-xxx:~$ redis-cli -h 192.168.0.xxx -p 6379
192.168.0.xxx:6379> auth password
OK
192.168.0.xxx:6379> info server
# Server
redis_version:6.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d9a11cae60901d33
redis_mode:standalone
os:Linux 5.17.3-1.el7.elrepo.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:9.3.1
process_id:1881
run_id:c9aaa0270dc40518a13f7cf757a7cffdea3679c5
tcp_port:6379
uptime_in_seconds:2887473
uptime_in_days:33
hz:20
configured_hz:10
lru_clock:11443353
executable:/opt/redis-6.0.8/src/redis-server
config_file:/opt/redis-6.0.8/redis.conf
io_threads_active:0
192.168.0.xxx:6379> info clients
# Clients
connected_clients:2175
client_recent_max_input_buffer:4
client_recent_max_output_buffer:0
blocked_clients:17
tracking_clients:0
clients_in_timeout_table:0
- redis_version: Redis服务器版本号
- redis_git_sha1: Redis服务器Git SHA1
- redis_git_dirty: Redis服务器是否包含未提交的修改
- redis_build_id: Redis服务器构建ID
- redis_mode: Redis服务器运行模式(standalone表示独立模式)
- os: Redis服务器所在的操作系统
- arch_bits: Redis服务器操作系统的架构位数
- multiplexing_api: Redis服务器使用的事件处理库
- atomicvar_api: Redis服务器使用的原子操作库
- gcc_version: Redis服务器编译时使用的GCC版本
- process_id: Redis服务器进程ID
- run_id: Redis服务器运行ID
- tcp_port: Redis服务器监听的TCP端口号
- uptime_in_seconds: Redis服务器运行的总秒数
- uptime_in_days: Redis服务器运行的总天数
- hz: Redis服务器内部调度频率(每秒调度次数)
- configured_hz: Redis服务器配置的内部调度频率
- lru_clock: Redis服务器LRU算法时钟
- executable: Redis服务器可执行文件路径
- config_file: Redis服务器配置文件路径
- io_threads_active: 活动的Redis I/O线程数
指标域值提示是根据具体应用场景和性能需求来确定的,不同的应用可能有不同的指标域值。一般来说,以下是一些常见的指标域值提示:
- connected_clients: 建议保持在合理范围内,不要超过Redis服务器的最大连接数。
- client_recent_max_input_buffer: 输入缓冲区的最大使用量。如果该值持续增长,可能表示客户端输入数据量过大或者Redis服务器处理能力不足。
- client_recent_max_output_buffer: 输出缓冲区的最大使用量。如果该值持续增长,可能表示Redis服务器输出数据量过大或者客户端处理能力不足。
- blocked_clients: 被阻塞的客户端数。如果该值持续增长,可能表示Redis服务器处理能力不足或者客户端请求频率过高。
根据当前参数,可以给出一些建议和进一步的指标问题排查建议:
- connected_clients当前为2175,可能超出了合理范围,建议检查是否有连接泄漏或者是否需要增加Redis服务器的最大连接数配置。
- client_recent_max_input_buffer为4,处于较低水平,没有明显的问题。
- client_recent_max_output_buffer为0,表示输出缓冲区未达到上限,没有明显的问题。
- blocked_clients为17,可能表示部分客户端正在等待某些资源或者Redis服务器处理能力不足。
进一步的指标问题排查建议:
- 可以通过检查其他相关参数(如内存使用情况、命中率、网络延迟等)来进一步分析Redis服务器的性能瓶颈。
- 可以使用Redis的监控工具(如Redis的监控命令、第三方监控工具等)来实时监测Redis服务器的各项指标,并与预设的域值进行对比,以及时发现和解决潜在问题。
- 如果Redis服务器负载较高,可以考虑使用Redis集群或者增加服务器资源来提升性能。
192.168.0.xxx:6379> info memory
# Memory
used_memory:294828600
used_memory_human:281.17M
used_memory_rss:371830784
used_memory_rss_human:354.61M
used_memory_peak:382274168
used_memory_peak_human:364.57M
used_memory_peak_perc:77.12%
used_memory_overhead:51317262
used_memory_startup:832368
used_memory_dataset:243511338
used_memory_dataset_perc:82.83%
allocator_allocated:294886800
allocator_active:306393088
allocator_resident:317407232
total_system_memory:33674829824
total_system_memory_human:31.36G
used_memory_lua:61440
used_memory_lua_human:60.00K
used_memory_scripts:9336
used_memory_scripts_human:9.12K
number_of_cached_scripts:17
maxmemory:2147483648
maxmemory_human:2.00G
maxmemory_policy:volatile-lru
allocator_frag_ratio:1.04
allocator_frag_bytes:11506288
allocator_rss_ratio:1.04
allocator_rss_bytes:11014144
rss_overhead_ratio:1.17
rss_overhead_bytes:54423552
mem_fragmentation_ratio:1.26
mem_fragmentation_bytes:77002248
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:36944550
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
192.168.0.xxx:6379> info cpu
# CPU
used_cpu_sys:12126.416419
used_cpu_user:14184.305666
used_cpu_sys_children:1301.403413
used_cpu_user_children:13394.984311
192.168.0.xxx:6379> info Persistence
# Persistence
loading:0
rdb_changes_since_last_save:1704
rdb_bgsave_in_progress:0
rdb_last_save_time:1689164804
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:2
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:14929920
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0
- Memory(内存)
- used_memory: 已使用内存的字节数
- used_memory_human: 已使用内存的人类可读形式
- used_memory_rss: Redis进程占用的总内存大小
- used_memory_rss_human: Redis进程占用的总内存大小的人类可读形式
- used_memory_peak: Redis历史上使用过的最大内存大小
- used_memory_peak_human: Redis历史上使用过的最大内存大小的人类可读形式
- used_memory_peak_perc: 当前内存使用占最大内存使用的百分比
- used_memory_overhead: Redis内部管理结构占用的字节数
- used_memory_startup: Redis启动时已使用的内存大小
- used_memory_dataset: Redis数据集占用的字节数
- used_memory_dataset_perc: Redis数据集占已使用内存的百分比
- allocator_allocated: 分配器已分配的总字节数
- allocator_active: 分配器当前活跃的字节数
- allocator_resident: 分配器当前常驻内存的字节数
- total_system_memory: 系统总内存大小
- total_system_memory_human: 系统总内存大小的人类可读形式
- used_memory_lua: Lua脚本所占用的字节数
- used_memory_lua_human: Lua脚本所占用的人类可读形式
- used_memory_scripts: Redis脚本所占用的字节数
- used_memory_scripts_human: Redis脚本所占用的人类可读形式
- number_of_cached_scripts: 缓存的脚本数量
- maxmemory: Redis配置的最大内存大小
- maxmemory_human: Redis配置的最大内存大小的人类可读形式
- maxmemory_policy: Redis配置的内存淘汰策略
- mem_fragmentation_ratio: 内存碎片率
- mem_fragmentation_bytes: 内存碎片大小
- CPU(CPU)
- used_cpu_sys: Redis服务器在内核态执行的CPU时间(秒)
- used_cpu_user: Redis服务器在用户态执行的CPU时间(秒)
- used_cpu_sys_children: Redis后台子进程在内核态执行的CPU时间(秒)
- used_cpu_user_children: Redis后台子进程在用户态执行的CPU时间(秒)
- Persistence(持久化)
- loading: 是否正在进行数据加载
- rdb_changes_since_last_save: 上次保存快照以来发生的修改次数
- rdb_bgsave_in_progress: 是否正在进行后台保存快照
- rdb_last_save_time: 上次保存快照的时间戳
- rdb_last_bgsave_status: 上次后台保存快照的状态
- rdb_last_bgsave_time_sec: 上次后台保存快照所耗费的时间(秒)
- rdb_current_bgsave_time_sec: 当前正在进行的后台保存快照所耗费的时间(秒)
- rdb_last_cow_size: 上次写时复制操作所需的内存大小
- aof_enabled: 是否开启了AOF持久化
- aof_rewrite_in_progress: 是否正在进行AOF重写
- aof_rewrite_scheduled: 是否已计划进行AOF重写
- aof_last_rewrite_time_sec: 上次AOF重写所耗费的时间(秒)
- aof_current_rewrite_time_sec: 当前正在进行的AOF重写所耗费的时间(秒)
- aof_last_bgrewrite_status: 上次后台AOF重写的状态
- aof_last_write_status: 上次AOF写入的状态
- aof_last_cow_size: 上次写时复制操作所需的内存大小
- module_fork_in_progress: 是否正在进行模块(module)的fork操作
- module_fork_last_cow_size: 上次模块fork操作所需的内存大小
指标域值提示是根据具体应用场景和性能需求来确定的,不同的应用可能有不同的指标域值。一般来说,以下是一些常见的指标域值提示:
- 内存使用率(used_memory/maxmemory):建议保持在 70% 以下,超过 90% 可能会导致性能问题。
- CPU使用率(used_cpu_sys、used_cpu_user等):建议保持在合理范围内,超过服务器处理能力可能会导致性能问题。
- 持久化状态(rdb_bgsave_in_progress、aof_rewrite_in_progress等):检查是否正常进行持久化操作,以及上次操作是否成功。
根据当前参数,可以给出一些建议和进一步的指标问题排查建议:
- 内存使用率为 77.12%(used_memory_peak_perc),接近最大内存配置,可能需要增加Redis的最大内存配置。
- CPU使用率没有提供具体数值,建议根据实际情况进行监控和调整。
- 持久化状态中,AOF持久化未开启(aof_enabled为0),如果需要持久化数据,可以考虑开启AOF持久化。
- 持久化状态中,RDB持久化已有变更但未进行保存(rdb_changes_since_last_save为1704),建议及时进行保存操作以避免数据丢失。
进一步的指标问题排查建议:
- 可以通过监控工具实时查看Redis的内存和CPU使用情况,以及持久化的状态,对比预设的域值进行分析。
- 如果内存使用率过高,可以考虑优化数据结构、增加Redis实例或重新评估业务需求。
- 如果CPU使用率过高,可以考虑优化代码逻辑、增加服务器资源或调整Redis配置参数。
- 如果持久化状态异常或频繁出现问题,可以检查日志文件以获取更多详细信息,并根据具体情况进行调整。
192.168.0.xxx:6379> info
# Server
redis_version:6.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d9a11cae60901d33
redis_mode:standalone
os:Linux 5.17.3-1.el7.elrepo.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:9.3.1
process_id:1881
run_id:c9aaa0270dc40518a13f7cf757a7cffdea3679c5
tcp_port:6379
uptime_in_seconds:2887565
uptime_in_days:33
hz:20
configured_hz:10
lru_clock:11443445
executable:/opt/redis-6.0.8/src/redis-server
config_file:/opt/redis-6.0.8/redis.conf
io_threads_active:0
# Clients
connected_clients:2175
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:17
tracking_clients:0
clients_in_timeout_table:0
# Memory
used_memory:296475304
used_memory_human:282.74M
used_memory_rss:371748864
used_memory_rss_human:354.53M
used_memory_peak:382274168
used_memory_peak_human:364.57M
used_memory_peak_perc:77.56%
used_memory_overhead:51317390
used_memory_startup:832368
used_memory_dataset:245157914
used_memory_dataset_perc:82.92%
allocator_allocated:296109744
allocator_active:307675136
allocator_resident:317607936
total_system_memory:33674829824
total_system_memory_human:31.36G
used_memory_lua:61440
used_memory_lua_human:60.00K
used_memory_scripts:9336
used_memory_scripts_human:9.12K
number_of_cached_scripts:17
maxmemory:2147483648
maxmemory_human:2.00G
maxmemory_policy:volatile-lru
allocator_frag_ratio:1.04
allocator_frag_bytes:11565392
allocator_rss_ratio:1.03
allocator_rss_bytes:9932800
rss_overhead_ratio:1.17
rss_overhead_bytes:54140928
mem_fragmentation_ratio:1.26
mem_fragmentation_bytes:75684608
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:36944550
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0
rdb_changes_since_last_save:1814
rdb_bgsave_in_progress:0
rdb_last_save_time:1689164804
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:2
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:14929920
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0
# Stats
total_connections_received:4170288
total_commands_processed:253530893
instantaneous_ops_per_sec:99
total_net_input_bytes:10169737968
total_net_output_bytes:64944014727
instantaneous_input_kbps:2.86
instantaneous_output_kbps:3.15
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:2366080
expired_stale_perc:0.05
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:901985
evicted_keys:0
keyspace_hits:19075472
keyspace_misses:4257935
pubsub_channels:12
pubsub_patterns:4
latest_fork_usec:10138
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_reads_processed:257177147
total_writes_processed:267627442
io_threaded_reads_processed:0
io_threaded_writes_processed:0
# Replication
role:master
connected_slaves:0
master_replid:13272ce1ccc52b7ecba81bf65f0b107df53856c1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:12126.710197
used_cpu_user:14184.617914
used_cpu_sys_children:1301.403413
used_cpu_user_children:13394.984311
# Modules
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=54302,expires=501,avg_ttl=3896240642
db1:keys=94,expires=0,avg_ttl=0
db2:keys=2380,expires=2306,avg_ttl=181568406
db3:keys=31,expires=12,avg_ttl=323108300
db4:keys=2,expires=0,avg_ttl=0
db5:keys=532,expires=4,avg_ttl=102442850
db6:keys=4566,expires=50,avg_ttl=283744795
db7:keys=25,expires=0,avg_ttl=0
db9:keys=4,expires=0,avg_ttl=0
db10:keys=1,expires=0,avg_ttl=0
db11:keys=66151,expires=77,avg_ttl=831824179053
db12:keys=63541,expires=4702,avg_ttl=5411346061
db13:keys=2,expires=0,avg_ttl=0
db14:keys=2,expires=0,avg_ttl=0
db17:keys=11,expires=7,avg_ttl=776463849
db20:keys=5,expires=5,avg_ttl=916428250
db21:keys=60430,expires=14,avg_ttl=990889338250
db22:keys=1,expires=0,avg_ttl=0
db23:keys=3,expires=0,avg_ttl=0
db25:keys=44,expires=44,avg_ttl=2124079407749
db26:keys=45,expires=45,avg_ttl=2137624773064
db27:keys=416,expires=357,avg_ttl=210190719
db28:keys=40,expires=0,avg_ttl=0
db31:keys=7488,expires=0,avg_ttl=0
db33:keys=1,expires=0,avg_ttl=0
db34:keys=69,expires=10,avg_ttl=6218956214
Java项目健康检查:[www@efx-11 bin]$ curl -m 5 -s -w "-http_code-"%{http_code}"-http_code-" --connect-timeout 10 http://127.0.0.1:xxx/health
{"status":"UP"}-http_code-200-http_code-[www@efx-11 bin]$
may be /api/actuator/health /api/health
数据库连接数:netstat -anp | grep "$port" |grep $pid | wc -l
- `netstat -anp`: 显示所有网络连接的状态 - `grep "$port"`: 查找指定端口号的连接 - `grep $pid`: 查找指定进程ID的连接 - `wc -l`: 统计行数,即符合条件的连接数量
可能的结果: - 如果结果为0,则表示该端口号和进程ID没有匹配的连接
- 如果结果为大于0的数字,则表示存在符合条件的连接数量
建议: - 如果结果为0,表示该端口和进程没有任何网络连接,可以进一步检查程序是否启动正常或者是否有其他异常情况。 - 如果结果为大于0的数字,可以进一步使用其他命令如`ps`和`lsof`查看进程和连接的详细信息,以确定是否存在异常情况。
oracle :user_indexes
1、系统监控
系统cpu、内存、磁盘空间、带宽
2、数据库监控
数据库状态、活动会话、并发等待时间、执行等待时间、用户io等待时间、系统io等待时间、表空间状态、用户提交数、用户回滚数
3、redis监控
内存使用、命令执行数/秒、网络io、总数据项数/DB、命中数/秒、没有过期key数量
4、jvm监控
线程数、线程状态】文件描述符信息、http错误数、http响应平均和最大时间、堆内存数据、gc数据、新生代空间、老年代空间、元空间、io信息、堆外内存数大小、堆外内存数、类加载数量和时间、
5、consul监控
consul的leader、节点数、cpu空闲率、节点负载、节点服务心跳、连接发送接收消息数量
zabbix proxy 模式 实现JVM监控
1. 下载 catalina-jmx-remote.jar
Index of /dist/tomcat/tomcat-8/v8.5.61/bin/extras (apache.org)
2. 添加tomact中JMX的参数
打开tomcat/bin/catalina.sh文件,在#!/bin/sh下面添加如下
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=12345 --端口号
-Djava.rmi.server.hostname=192.168.1.239 " --实际IP调整
3. 重启tomcat
详情见zabbix4.0学习三:Zabbix监控tomcat和java_zabbix 10052_陈袁的博客-CSDN博客
4. jar启动调整
java
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.0.xxx
-Dcom.sun.management.jmxremote.port=12345
-jar XXXX.jar