云服务运维

news/2024/6/18 21:24:20 标签: 运维, oracle, 数据库

监控指标介绍

服务器监控

CPU状态:cpu使用率、负载
内存状态:应用内存使用率、物理内存使用量
磁盘状态:分区大小、使用趋势
IO状态:IOPS、MBPS、每秒读写速率、await
网卡状态:网络出入流量Bps、pps、丢包率、TCP状态、网络连接

数据库监控:

慢sql
异常死锁
Druid连接池 等待线程数

案例介绍

应用内存飚高

案例1:通过数据库一次查询量太大(伴随慢sql), 一次加载到应用内存处理。

修复:数据库分页查询处理,增加limit

案例2:部署应用后观测到应用内存持续上涨,是否有风险

Java进程占用内存后,即使GC回收了,也不会立即降低,这是因为Java虚拟机的内存管理机制。

Java虚拟机采用的是分代垃圾回收策略,将内存分为年轻代和老年代。年轻代又分为Eden区和两个Survivor区S0、S1。
当Java程序运行时,对象会被分配在Eden区中。当Eden区满时,会触发一次MinorGC,将不再使用的对象回收掉,然后存活下来的对象会被移动到Survivor区S0中。
等Eden区再满了,就再触发一次Minor GC,Eden和S0中的存活对象又会被复制送入第二块survivor space S1(这个过程非常重要,因为这种复制算法保证了S1中来自S0和Eden两部分的存活对象占用连续的内存空间,避免了碎片化的发生,碎片化带来的风险是极大的,严重影响JAVA程序的性能)。S0和Eden被清空,然后下一轮S0与S1交换角色,如此循环往复。如果对象的复制次数达到16次,该对象就会被送到老年代中。

在这个过程中,如果某个对象在年轻代中存活的时间很长,就会被移动到老年代中。而老年代中的对象只有在Full GC时才会被回收。

因此,如果Java进程中的对象大部分都在老年代中,那么即使进行了多次Minor GC,也不会释放掉这些对象占用的内存,只有进行Full GC时才能释放。
如果 Full GC 的频率过高,就可能会导致系统性能下降,因为它会占用大量的 CPU 时间和内存资源。因此,需要对 Full GC 的频率进行监控和调优,以保证系统的正常运行。
频繁的full gc可能是由于以下原因导致的:

  1. 内存泄漏:如果应用程序存在内存泄漏,那么就会导致内存中的对象无法被垃圾回收器清理,最终导致内存溢出,触发full gc。
  2. 对象生命周期过长:如果应用程序中的对象生命周期过长,那么就会导致这些对象长时间占用内存,最终导致内存溢出,触发full gc。
  3. 堆内存设置不合理:如果堆内存设置过小,那么就会导致内存不足,触发full gc。如果堆内存设置过大,那么就会导致full gc的频率增加,因为垃圾回收器需要更长的时间来扫描整个堆内存。
  4. 大对象:如果应用程序中存在大对象,那么就会导致内存中的碎片增加,最终导致内存不足,触发full gc。
  5. 过多的对象创建:如果应用程序中频繁地创建对象,那么就会导致内存中的对象数量增加,最终导致内存不足,触发full gc。

JVM调优:
Java虚拟机中有Xmx和Xms参数, 分别用于设置Java虚拟机(JVM)的最大堆内存和初始堆内存大小(启动时分配的最小内存)。

-Xmx参数用于设置JVM的最大堆内存大小,格式为-Xmx[g|G|m|M|k|K],其中表示最大堆内存大小,单位可以是GB、MB或KB。
-Xms参数用于设置JVM的初始堆内存大小,格式为-Xms[g|G|m|M|k|K],其中表示初始堆内存大小,单位可以是GB、MB或KB。

通常情况下,Xmx和Xms参数应该设置为相同的值,以避免JVM在运行时不断地调整堆内存大小,从而影响应用程序的性能。同时,应该根据应用程序的内存需求和可用系统资源来合理地设置这两个参数。如果程序一直运行,那么Java进程的内存占用量会逐渐增加,但不会低于-Xms参数指定的值。因此,如果程序需要占用大量内存,可以适当增加-Xms参数的值,这样可以避免频繁的内存分配和回收,提高程序的性能。

案例3:应用日志存在了系统内存中,看到应用内存偏高

// 查看used内存
# free -g 
              total        used        free      shared  buff/cache   available
Mem:             16          13          2           0           1          2

// 查看java应用的最大堆内存
# ps -ef |grep java |grep Xmx 
... -Xmx8192m ...

// 查看相差了5G,最终发现有日志生成在run目录下
# df -h
Filesystem           Size  Used Avail Use% Mounted on
tmpfs                 16G  5G   11G  45% /run

tmpfs是一种基于内存的文件系统,它将一部分系统内存作为文件系统的存储空间,可以用来存储临时文件和缓存数据等。
在Linux系统中,tmpfs默认挂载在/run目录下,因此如果应用程序在/run目录下生成了大量的日志文件,那么这些文件的大小就会被计算在tmpfs的使用量中。
由于tmpfs是基于内存的文件系统,因此它的使用量也会被计算在系统的内存使用量中,从而导致应用程序的内存使用率看起来比实际情况要高。

修改方案:
1,修改日志路径
2,限制日志大小:如以下是常见的/etc/systemd/journald.conf配置选项及其示例说明:

将journal日志文件存储在特定目录下:

Storage=auto
SystemMaxUse=50M
SystemKeepFree=100M
SystemMaxFileSize=10M

这个示例将journal日志文件存储在默认的/var/log/journal目录下,并限制了系统磁盘上journal文件占用空间不超过50MB,至少保留100MB的可用空间。同时还限制单个journal文件大小不超过10MB。

cpu飚高

案例1:parallelStream导致cpu飙升

修复:使用字典树代替parallelStream,通过线程池进行管理
另外,可以在方法上增加 @Transactional(propagation = Propagation.NOT_SUPPORTED) 作用是将当前方法设置为不支持事务,即当前方法不会参与到任何事务中,这种设置通常用于一些只读操作或者不需要事务支持的操作。例如在查询操作中,如果使用事务会占用更多的系统资源,而且可能会导致锁定表或行,影响系统的并发性能。因此,将查询操作设置为不支持事务可以提高系统的并发性能和响应速度。


http://www.niftyadmin.cn/n/5479630.html

相关文章

doss攻击为什么是无解的?

这个让Google、亚马逊等实力巨头公司也无法避免的攻击。可以这么说,是目前最强大、最难防御的攻击之一,属于世界级难题,并且没有解决办法。 Doss攻击的原理不复杂,就是利用大量肉鸡仿照真实用户行为,使目标服务器资源…

如何在Python中实现设计模式?

如何在Python中实现设计模式? 设计模式是在软件开发中解决常见问题的最佳实践。它们提供了在特定上下文中对软件设计的重复使用性解决方案。Python,作为一种灵活且强大的编程语言,非常适合实现各种设计模式。下面,我将介…

统信UOS(Linux)安装nvm node管理工具

整篇看完再操作,有坑!! 官网 nvm官网 按照官网方式安装,一直报 错 经过不断研究,正确步骤如下 1、下载安装包 可能因为网络安全不能访问github,我是链接热点下载的 wget https://github.com/nvm-sh/…

Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第四章 HBase分布式数据库

第四章 HBase分布式数据库 1、HBase概述 HBase的技术特点 容量大。 当关系数据库的单个表的记录在亿级时,则查询和写入的性能都会呈现指数级下降,而HBase对于单表存储百亿或更多的数据都没有性能问题。 表结构不固定。 可以根据需要动态的增加列&#x…

【centos】Redis离线安装配置教程

Linux 离线安装Redis配置教程 一、下载二、安装redis三、设置redis开机自启,并且添加到系统服务四、gcc安装 redis官网地址:https://redis.io/ 一、下载 【点击进入下载地址:http://download.redis.io/releases/】选择安装包:re…

武汉星起航:挂牌上海股交中心,知名度飙升,获客户更高信赖

2023年10月30日,对于武汉星起航电子商务有限公司而言,是一个具有历史意义的日子。这一天,公司在上海股权托管交易中心成功挂牌展示,这一重大举措不仅标志着公司发展的新高度,更使得武汉星起航的名声和知名度得到了前所…

《系统架构设计师教程(第2版)》第9章-软件可靠性基础知识-01-软件可靠性基本概念

文章目录 1. 软件可靠性的概述1.1 定义1.1.1 规定的时间1.1.2 规定的条件1.1.3 所要求的功能 1.2 定义的特点和意义1.3 注意点 2. 软件可靠性的定量描述2.1 规定时间2.1.1 自然时间2.1.2 运行时间执行时间 2.2 失效概率 F(t)2.3 可靠度 R(t)2.4 失效强度 f(t)2.5 平均失效前时间…

程序员就业和发展前景,一文带你了解

程序员,英文是 code worker,顾名思义就是计算机程序的作者。它通常指从事计算机软件开发的人员,当然也包括用计算机语言编写程序来进行各种信息处理的人。现在软件行业中,程序员属于技术含量较高的一个群体。程序员就业和发展前景…