Skip to main content

应用进程占用内存超出限制导致系统异常终止

Python导入opencv模块报错,提示:ImportError: libGL.so.1: cannot open shared object file: No such file or directory

现象描述

Python导入opencv模块报错。操作及提示如下:

---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
Cell In[1], line 1
----> 1 import cv2
2 import numpy as np
3 import ipywidgets as widgets

File ~/miniconda3/lib/python3.9/site-packages/cv2/__init__.py:181
176 if DEBUG: print("Extra Python code for", submodule, "is loaded")
178 if DEBUG: print('OpenCV loader: DONE')
--> 181 bootstrap()

File ~/miniconda3/lib/python3.9/site-packages/cv2/__init__.py:153, in bootstrap()
149 if DEBUG: print("Relink everything from native cv2 module to cv2 package")
151 py_module = sys.modules.pop("cv2")
--> 153 native_module = importlib.import_module("cv2")
155 sys.modules["cv2"] = py_module
156 setattr(py_module, "_native", native_module)

File ~/miniconda3/lib/python3.9/importlib/__init__.py:127, in import_module(name, package)
125 break
126 level += 1
--> 127 return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

解决方案

根据错误提示,环境中缺少“libGL.so.1”文件,即缺少GL库文件。执行如下操作安装安装GL库。

  • Ubuntu22.04版本镜像:

    # 更新apt-get
    apt-get update
    # 安装GL库
    apt install libgl1-mesa-glx
  • OpenEuler22.03版本镜像:

    # 安装GL库
    pip3 install opencv-python-headless

父主题: 样例运行

Python导入torchvision报错

现象描述

通过conda list命令查询torch与torchvision版本,分别为1.13.0和0.14.0,二者为配套版本,但import torchvision时报错如图1所示。

图1 Python导入torchvision报错

可能原因

环境中可能存在其他版本的torch和torchvision的文件或残留文件。

解决方案

  1. 确保完全卸载PyTorch相关文件。

    pip uninstall torch
    pip uninstall torchvision
    pip uninstall torchaudio
  2. 重新安装对应版本。

    pip install torch==1.13.0
    pip install torchvision==0.14.0
    pip install torchaudio==1.13.0

父主题: 样例运行

应用进程占用内存超出限制导致系统异常终止

现象描述

以ATC工具为例,当打开了虚拟内存限制而atc尝试使用超出限制的内存大小时会报错,报错信息一般如下所示:

ATC start working now, please wait for a moment.
terminate called after throwing an instance of 'std::system_error'
what(): Resource temporarily unavailable
/usr/local/Ascend/ascend-toolkit/latest/bin/atc: line 17: 44752 Aborted (core dumped) ${PKG_PATH}/bin/atc.bin "$@"
(base) root@davinci-mini:/home/lanxi-samples/samples/cplusplus/level1_single_api/4_op_dev/2_verify_op/acl_execute_add/run/out# Process ForkServerProcess-2:
Traceback (most recent call last):
File "/root/miniconda3/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
self.run()
File "/root/miniconda3/lib/python3.9/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/common/repository_manager/route.py", line 61, in wrapper
raise exp
File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/common/repository_manager/route.py", line 58, in wrapper
func(*args, **kwargs)
File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/common/repository_manager/route.py", line 275, in task_distribute
key, func_name, detail = resource_proxy[TASK_QUEUE].get()
File "<string>", line 2, in get
File "/root/miniconda3/lib/python3.9/multiprocessing/managers.py", line 809, in _callmethod
kind, result = conn.recv()
File "/root/miniconda3/lib/python3.9/multiprocessing/connection.py", line 255, in recv
buf = self._recv_bytes()
File "/root/miniconda3/lib/python3.9/multiprocessing/connection.py", line 419, in _recv_bytes
buf = self._recv(4)
File "/root/miniconda3/lib/python3.9/multiprocessing/connection.py", line 388, in _recv
raise EOFError

解决方案

  1. Ctrl+C关闭当前进程。

    如果发现系统卡死可以在SSH客户端界面中立刻按Ctrl+C关闭当前进程。

    注意:系统可能需要至多50秒才能从假死状态中恢复响应。

  2. 借助ulimit命令,在atc等内存消耗比较大的进程启动前设置内存使用上限,防止内存耗尽导致宕机。

    目前的测试中,仅限制虚拟内存的使用也有防止系统宕机的作用。

    1. 打开虚拟内存限制

      ulimit -v 20480000

      2048000代表kb为单位的虚拟内存上限即2GB。

      查看虚拟内存限制是否生效,可以使用ulimit -a命令或者直接使用ulimit -v

      ulimit -a输出:

      (base) root@davinci-mini:~# ulimit -a
      real-time non-blocking time (microseconds, -R) unlimited
      core file size (blocks, -c) 0
      data seg size (kbytes, -d) unlimited
      scheduling priority (-e) 0
      file size (blocks, -f) unlimited
      pending signals (-i) 12584
      max locked memory (kbytes, -l) 449876
      max memory size (kbytes, -m) unlimited
      open files (-n) 1024
      pipe size (512 bytes, -p) 8
      POSIX message queues (bytes, -q) 819200
      real-time priority (-r) 0
      stack size (kbytes, -s) 8192
      cpu time (seconds, -t) unlimited
      max user processes (-u) 12584
      virtual memory (kbytes, -v) 2048000
      file locks (-x) unlimited

      ulimit -v输出:

      (base) root@davinci-mini:~# ulimit -v
      2048000
    2. 关闭虚拟内存限制

      当确定不需要运行atc等有宕机风险的程序时,可以关闭内存限制。

      ulimit -v unlimited

      确保内存限制已关闭,可再次使用ulimit -a查看限制详情。

父主题: 样例运行

智能车手动控制时车轮转向错误或四个轮子转速差异较大

现象描述

进入到智能车的手动控制环节后,启动智能车的控制主入口,按照应用开发指南中的键盘操作智能车,智能车车轮反向运转或将智能车放到运动场地后,运行路线不走直线。

可能原因

考虑到智能车成本问题,TT减速电机会偶发出场默认旋转方向相反的情况,这导致了车轮反向运转;另外也由于电机在相同电压电平下产生扭矩也有差异,这将导致四个轮子转速有差异,运行路线不是直线。

解决方案

针对车轮反转的情况,需要进入到开发者套件上的样例代码目录中,修改控制电机转向的参数。

cd /home/Car/python/src/actions
vim base_action.py

并找到“self.motor_rating”参数,四个参数分别对应下发到电机的速度比例,从左到右依次对应智能车应用开发指南中的[直流电机及其控制](https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/23.0.RC1/Application Cases/ivadg/ivadg_0007.html)章节的1、2、3、4号电机,将反转的电机对应的速度参数前添加一个负号即可改变电机转向。

图1 “self.motor_rating”参数界面图

针对四个轮子转速有差异的情况,需要修改图1中的同一参数比率大小。若在前进时智能车向左偏移,说明小车右侧车轮速度相对左侧车轮速度快了,针对性调整参数的大小即可。

父主题: 智能车应用运行问题

运行智能车主入口程序main.py时出现‘ttyUSB0’或'ttyUSB1'相关错误导致程序无法启动

现象描述

运行智能车主入口程序main.py时出现‘ttyUSB0’或'ttyUSB1'相关错误导致程序无法启动。

可能原因

USB扩展坞和ESP32控制模块都以USB连接到开发者套件上,接口接反导致程序无法启动。

解决方案

将USB扩展坞和ESP32控制模块在开发者套件上的接口调换一下,重新运行程序即可。

父主题: 智能车应用运行问题

在线提单