这就是当时jstack的日志,大量io进行park,等到数据库资源。简单的说,数据库挂了,等到资源的连接。
1.RainBond平台
我大胆猜测,RainBond平台本质上的机制是共享内存(参考轻量云服务器)。我查看了容器的free -g 他有接近100G以上的内存。然后他的内存,应该是多台的刀片机组成的。
佐证这一个观点的就是,有的时候我开启多个实例的时候,RainBond环境需要进行资源调度,然后他们没有这么大的连续内存,导致调度不起来。
不过很气的就是,明明pod我申请了32g,我xmx设置20G,他甚至都会自杀。
2.虚拟机平台
虚拟机平台,利用dmesg -T | grep kill定位问题,调整GC参数,查看服务死机jsatck数据,就可以作为问题定位项。
3.一些服务假死的参考思路
大量阻塞线程,进行WAITING、BLOCKED 或 TIMED_WAITING(资源获取不到)_
频繁GC或者full gc的
http未设置合理的时间,资源池未释放
4.最后引用当时大佬给我的一些解决的思路(大佬太贵被优化了)
1、查看线程情况
死锁,Deadlock(重点关注)
等待资源,Waiting on condition(重点关注)
• 等待获取监视器,Waiting on monitor entry(重点关注)
阻塞,Blocked(重点关注)
• 执行中,Runnable
• 暂停,Suspended
• 对象等待中,Object.wait() 或 TIMED_WAITING
• 停止,Parked
查看线程情况:
jstack
查看死锁的线程
jstack -l
如果存在大量
死锁,Deadlock(重点关注)
等待资源,Waiting on condition(重点关注)
• 等待获取监视器,Waiting on monitor entry(重点关注)
阻塞,Blocked(重点关注)
就要分析是不是接口请求太耗时,导致链接不够用导致
2、查看堆栈情况
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
-dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
查看堆栈使用情况
jmap -heap pid
查看类占用情况
jmap -histo pid
3、查看垃圾回收情况
jstat -gc pid 2000
查看垃圾回收时间是否正常
在线上环境中,经常会出现服务卡顿,造成数据无法更新、获取的现象。对于这种现象现,个人一自身的工作经历总结如下:
一、定时任务时间间隔短,造成服务卡顿,线程池爆满,线程锁无法释放,进而服务崩溃:
设定的时间间隔内,程序未执行完成,又开始进行下一轮的程序执行,这样的幂等性执行最终造成线程池爆满,服务崩溃;
解决办法:根据业务量计算程序执行一次耗时,科学合理设定时间间隔;
二、定时任务,程序中存在HTTP请求,但是请求地址已经改变或者因为其他原因无法访问,这样累计起来的无响应请...
1. break和continue的作用(智*图)
break:用于完全退出一个循环(如 for, while)或一个 switch 语句。当在循环体内遇到break语句时,程序会立即跳出当前循环体,继续执行循环之后的代码。
continue:用于跳过当前循环体中剩余的部分,并开始下
一次循环。如果是在 for 循环中使用continue,则会直接进行条件判断以决定是否执行下一轮循环。
2. if分支语句和switch分支语句的异同之处(智*图)
相同点:都是用来根据不同的条件执行不同的代码块。
为了避免主控上电时舵机无故旋转,可以采取以下几种策略:
1. 初始化和设置:在程序开始时,确保对舵机进行了初始化,比如设置其默认角度为0度或停止位置。这可以防止由于硬件故障或未正确配置导致的初始动作。
2. 使用延时:在接通电源并启动控制循环之前,添加适当的延迟时间,让系统有时间稳定下来。
3. 硬件连接检查:确认舵机的连接线是否牢固,电源线和信号线是否插好。有时候,松动的连接可能导致意外操作。
4. 安全模式:设计程序时,可以在开始时执行安全检查,只有通过一系列条件(如传感器读取或手动确认)满足后才允许执行舵机的动作。
5. 舵机锁定机制:在程序设计中加入锁定或保护功能,当主控需要进行舵机操作前,先检查是否处于待命状态。
6. 检测电源:确保给舵机供电的电压稳定且在合适的范围内,过高或过低都可能导致异常运行。