java线上问题排查:进程假死或者oom killed

5 篇文章 2 订阅

我们在处理线上问题的时候,如果遇到了程序进程突然被kill掉,可以通过下面的命令来查看程序死掉的时间:

#查看oom被kill的进程
grep "Out of memory" /var/log/messages

在这里插入图片描述
或者:

#查看系统日志:
egrep -i -r 'killed process' /var/log

在这里插入图片描述
或者:

dmesg -T| grep java

在这里插入图片描述

从这些日志中我们可以看到程序oom的时间,结合我们程序本身的日志,可以推算是否是自己的程序挂掉了。

一般java程序在部署的时候会在启动的脚本中加入dump信息来帮助我们迅速定位线上的问题。
例如我写个简单的程序:

public class Main {
    public static void main(String[] args) {
        List<byte[]> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            list.add(new byte[1024000]);
        }
    }
}

只要程序一运行我们很快就会发现OOM异常:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at com.xqnode.Main.main(Main.java:10)

从这个异常中我们会快速定位到具体的哪一行出了问题。但是在实际生产环境不会出现这么简单的代码,通常程序是在不同的包中相互调用,而且会有多线程的情况,比较难定位到具体的错误发生的代码,所以我们在启动脚本中加入dump信息,然后我们就能找到对应的问题所在了。这里我们制定dump文件输出到D盘下。
启动配置:
在这里插入图片描述
再次运行程序,出现OOM的时候会在D盘下看到这个文件:
在这里插入图片描述
然后我们使用jdk中自带的工具jvisualvm.exe打开dump文件,路径在jdk/bin下。
点击 文件 => 装入,选择后缀名,打开文件
在这里插入图片描述

看到的界面如下:
在这里插入图片描述
我们从上面的红色部分可以清晰的看到我们的程序错误在哪里。

还可以使用jmap对正在进行的程序进行分析:

jmap -dump:live,format=b,file=heap.bin <pid>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在MATLAB中实现机械臂的仿真可以使用Robotic System Toolbox来进行。Robotic System Toolbox包含许多工具和函数,可以实现机械臂的建模、控制和仿真。 首先,需要定义机械臂的模型。可以使用robotics.RigidBodyTree类来创建机械臂的刚体树结构。通过添加关节和刚体可以构建机械臂的结构。可以使用函数robotics.RigidBody来创建刚体,并使用函数robotics.Joint来创建关节。 接下来,可以使用robotics.RigidBodyTree类中的函数来定义机械臂的初始状态。可以设置每个关节的初始位置和速度。 然后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的运动控制。可以使用函数robotics.InverseKinematics来实现逆运动学,根据目标位置和姿态来求解关节角度。可以使用函数robotics.CartesianTrajectory来生成机械臂的轨迹,指定起始和目标位置以及运动时间。 最后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的仿真。可以使用函数robotics.Rate来指定仿真的频率,然后使用循环来更新机械臂的状态和控制输入,实现机械臂的运动。 以下是一个基本的机械臂仿真的示例代码: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 添加机械臂的关节和刚体 % 设置机械臂的初始状态 % 运动控制 % 仿真循环 % 绘制机械臂的运动轨迹 ``` 在实际的机械臂仿真中,可能还需要考虑机械臂的动力学、碰撞检测和路径规划等问题。可以使用Robotic System Toolbox中的其他工具和函数来处理这些问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值