项目场景:
项目相关背景:
项目使用docker容器部署,在大屏展示功能时有及格功能,分别是展示当前系统内存使用情况,带宽使用情况。
问题描述
一个能执行,另一个报错
部分代码,第一个是收集带宽的功能,能够正常执行
System.out.println("开始收集带宽率");
float netUsage = 0.0f;
long netTotal = 0l;
Process pro1,pro2;
Runtime r = Runtime.getRuntime();
try {
String command = "cat /proc/net/dev";
//第一次采集流量数据
long startTime = System.currentTimeMillis();
pro1 = r.exec(command);
BufferedReader in1 = new BufferedReader(new InputStreamReader(pro1.getInputStream()));
String line = null;
long inSize1 = 0, outSize1 = 0;
while((line=in1.readLine()) != null){
line = line.trim();
if(line.startsWith("eth0")){
下面是查看内存使用情况的代码,会报错,exec不管是数组还是字符串都是一样的
log.info("开始收集cpu使用率");
List<Mem> list = new ArrayList<>();
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(new String[]{"free","-hl"});// 内存
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
p.getInputStream()));
原因分析:
提示: linux执行环境问题
我自然而然的登录linux使用free -hl发现没问题,忘记了jvm环境是在docker中,当我进入docker后,发现free命令不存在。而带宽是打开文件进行查看,所以没有报错
解决方案:
提示:下载环境或者更换基础环境
先看dockerfile是如何编写的
FROM openjdk:8-jre
WORKDIR /
ADD web-operation-system-0.1-SNAPSHOT.jar /web-operation-system-0.1-SNAPSHOT.jar
EXPOSE 9063
ENTRYPOINT ["java","-Xms256m","-Xmx512m","-jar","web-operation-system-0.1-SNAPSHOT.jar"]
1.环境中下载基础命令
RUN apt-get update&&apt-get -y install procps
2.更换基础环境(推荐)
因为这个下载速度很慢,也有失败的风险,建议在open-jdk这个基础镜像中下载好基础命令,再打成新的jdk镜像,作为该包的基础镜像