云服务运维

监控指标介绍

服务器监控

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.mzph.cn/news/804004.shtml

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

相关文章

C语言-教案习题巩固(难度跟题目序号无关,选择性去练习)

1,将一个一位数组a[10]中的元素值按逆序重新存放.假定数组中原来元素顺序为:1,3,5,7,9,8,6,4,2,0,按逆序重新存放后元素的值位:0,2,4,6,8,9,7,5,3,1。要求:在程序中将数组初值初始化,输出逆序重新存放后元素的值。 2,给定2维数组如下&#x…

跨框架探索:React Redux 和 Vuex 对比分析快速掌握React Redux

React Redux 和 Vuex 都是前端状态管理库,分别用于 React 和 Vue.js 框架。 它们都提供了一套规范的状态管理机制,帮助开发者更好地组织和管理应用状态。下面是它们的一些异同点: 相同点: 中心化状态管理:两者都提…

好用的前端框架及插件!!!

jQuery 对原生JS进行了封装,我们主要使用AJAX,DOM元素的操作相关的方法 官网:https://jquery.com HTML,CSS,JavaScript,jQuery相关中文资料网上有很多,可自行搜索 Bootstrap 定义了HTML元素的样式&…

tailwindcss+vue3+vite+preline项目搭建

最近原子化样式比较火,用了一下确实还不错,也确实是用一些标准的样式能够使网页看起来比较统一,而且能够极大的减轻起名字的压力,有利有弊,就不一一细说了。 之前开发都是习惯于使用vitevue3来开发的,此次搭…

Rocky(Centos)数据库等高并发或高io应用,linux应调优系统

一、系统参数优化 默认的最大打开文件数是1024.不满足生产环境的要求。按照如下配置: 1、修改 systemctl管理的 servie 资源限制 编辑/etc/systemd/system.conf # 全局的打开文件数 DefaultLimitNOFILE2097152 # 全局打开进程数 DefaultLimitNPROC655352、调整系…

Windows下编译boost库

官网:https://www.boost.org/ 使用git bash运行bootstrap.sh 运行b2.exe,会生成bin.v2文件夹 Cmake引入

【springboot开发】MVC和SSM

前言:关于MVC和SSM基本内容的梳理,以及两者之间的关系。 文章目录 1. 三层架构2. MVC3. SSM 1. 三层架构 三层架构是指: 视图层view(表现层): 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作…

Python文件和目录操作方法大全

在Python中,我们经常需要对文件和目录进行操作。这包括创建、读取、写入、复制、移动和删除文件,以及创建、删除和遍历目录等操作。Python提供了一些内置模块和函数来处理这些操作,如os模块和shutil模块。下面是一些常用的文件和目录操作方法…

CADMap3D2024 2023下载地址及安装教程

CAD Map 3D是由Autodesk开发的一款专业的地图制作和GIS(地理信息系统)软件。它是AutoCAD系列软件的一个扩展,提供了一系列特定于地理数据的工具和功能。 CAD Map 3D主要用于处理和管理与地理空间相关的数据,在地图制作、城市规划…

Java中的NIO(非阻塞I/O)以及其与传统I/O的区别

Java中的NIO(Non-blocking I/O,非阻塞式I/O)是Java提供的一种新的I/O处理方式,它从JDK 1.4开始被引入,并被统称为NIO(即New IO)。与传统的I/O(即普通的阻塞I/O)相比&…

stackqueuepriority_queue容器适配器仿函数反向迭代器

文章目录 容器适配器适配器STL标准库中stack和queue的底层结构 dequedeque原理介绍deque的缺陷为什么选择deque作为stack和queue的底层默认容器 stackstack介绍stack的使用stack模拟实现 queuequeue的介绍queue的使用queue的模拟实现 priority_queue(优先队列&#…

【算法刷题】八大排序算法总结(冒泡、选择、插入、二分插入、归并、快速、希尔、堆排序)

文章目录 八大排序算法总结1.冒泡排序2.选择排序3.插入排序4.二分插入排序5.归并排序6.快速排序7.希尔排序8.堆排序 八大排序算法总结 排序排序方法平均情况最好情况最坏情况空间稳定性1冒泡排序O(n2)O(n)O(n2)O(1)稳定2选择排序O(n2)O(n2)O(n2)O(1)不稳定3插入排序O(n2)O(n)O…

windows wireshark抓包rtmp推流出现TCP Retransmission

解决办法:tcp.port1935 && !(tcp.analysis.retransmission)

IGBT管选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,截止状态2.2,开通状态2.3,导通状态2.4,关断过程3,结构特点3.1,高输入阻抗3.2,高电流承受能力3.3,快速开关特性4,工艺流程4.1,硅片准备4.

将扁平数据转换为树形数据的方法

当遇到了好多扁平数据我们都无从下手?不知道如何处理? 家人们 无脑调用这个函数就好了 接口请求回来以后 调用这个函数传入实参就可以用啦~ // 树形菜单函数 function GetTreeData(data) {let TreeData [];let map new Map(); //存在id,对应所在的内…

Unity之Unity面试题(三)

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之Unity面试题(三) TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取…

关于Salesforce DevOps的理解

“DevOps”是一组结合了软件开发 (Dev) 和运营 (Ops) 的实践,可帮助团队更快、更可靠地构建、测试和发布软件。 DevOps 的核心理念包括持续集成(Continuous Integration)、持续交付(…

1.微服务

一、微服务是什么 微服务是一种架构风格,即,一个应用应该是一组小型服务,每个服务器只负责一种服务,服务之间可以通过 HTTP 的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 可以说,微…

websockets.exceptions.ConnectionClosedError: no close frame received or sent

websockets.exceptions.ConnectionClosedError: no close frame received or sent这个错误表明WebSocket连接在没有接收或发送关闭帧(close frame)的情况下被关闭了。WebSocket协议规定,连接的关闭应该是由发送关闭帧开始的,这样的…

VS2012编译Lua5.1的luafilesystem(lfs)

文章目录 lfs源码下载下载lua库编译lfs.dll检测和使用LuaFileSystem是一个Lua库,用于补充标准Lua发行版提供的与文件系统相关的一组函数。 LuaFileSystem提供了一种可移植的方式来访问底层目录结构和文件属性。LuaFileSystem是免费软件,使用与Lua 5相同的许可证。 下面的办法…