当前位置: 首页 > news >正文

Xorg 内存上涨的根源探究

Xorg 内存上涨的根源探究

起因

在同一客户端进程内显示多股视频源,通过SDL创建窗口渲染,由于网络抖动视频源出现频繁断流现象导致,渲染任务反复重启,从而导致SDL渲染窗口反复创建释放,最后导致Xorg内存持续上涨

排查准备

Xorg是什么?

Xorg(X.Org Server)是 X Window System(通常称为 X11X)的一个开源实现,它是类 Unix 系统(如 Linux、BSD)中负责图形用户界面(GUI)的核心组件。Xorg 的作用是管理计算机的图形显示,包括窗口绘制、输入设备(鼠标、键盘等)的控制以及多任务图形环境的支持。


Xorg 的核心功能

  1. 图形显示管理
    • 负责在屏幕上渲染窗口、图标、文本等图形元素。
    • 支持多显示器、分辨率调整和显卡驱动的配置。
  2. 输入设备控制
    • 管理鼠标、键盘、触摸板等输入设备,将操作传递给应用程序。
  3. 网络透明性
    • 允许程序在远程服务器上运行,而图形界面显示在本地(通过 X11 协议)。
  4. 多任务窗口环境
    • 支持多个应用程序同时运行并共享屏幕资源(如 GNOME、KDE 等桌面环境依赖 Xorg)。

Xorg 的架构和工作原理

Xorg 基于 客户端-服务器模型,其核心流程如下:

1. 架构组成
  • X Server
    • 直接控制硬件(显卡、显示器、输入设备),是系统的“图形引擎”。
    • 接收客户端(应用程序)的请求,执行图形渲染操作。
  • 客户端应用程序
    • 如 Firefox、LibreOffice,通过 X11 协议 向 X Server 发送绘图请求。
  • X Protocol
    • 定义客户端与服务器之间的通信规则,支持本地或网络传输(如 TCP/IP)。
2. 图形渲染流程
  1. 应用程序请求:客户端通过 Xlib 或 XCB 库生成图形绘制指令(如“在坐标 (x,y) 画一个矩形”)。
  2. 协议传输:指令封装为 X Protocol 消息,发送给 X Server。
  3. 服务器执行:X Server 解析指令,调用显卡驱动(如 NVIDIA、AMDGPU)完成渲染。
  4. 显示输出:通过内核的 DRM/KMS 将帧缓冲区内容输出到显示器。
3. 输入事件处理
  1. 硬件事件捕获:X Server 监听输入设备(如键盘按下、鼠标移动)。
  2. 事件分发:将输入事件通过 X Protocol 发送给当前焦点窗口对应的客户端。
  3. 应用程序响应:客户端接收事件并触发相应逻辑(如输入文字、移动光标)。
4. 网络透明性实现
  • 客户端和 X Server 可以运行在不同的机器上:
    • 本地运行:通过 Unix Domain Socket 通信(高效)。
    • 远程运行:客户端通过 TCP/IP 连接远程 X Server(需启用 X11Forwarding)。
5. 模块化驱动
  • 显卡驱动:以模块形式加载(如 nouveauamdgpu),负责优化图形性能。
  • 输入驱动:处理特定设备(如触摸屏、游戏手柄)的输入事件。
  • 配置文件:手动配置在 /etc/X11/xorg.conf,但现代系统通常自动检测硬件。

排查工具

内存监控

top 监控Xorg内存情况

Valgrind 是一个强大的内存调试和性能分析工具

# 使用Valgrind检测Xorg进程
sudo valgrind --trace-children=yes --leak-check=full Xorg :1 -noreset

# 应用层检测(需SDL调试符号)
LD_PRELOAD=/lib/libSDL2-2.0.so.0 valgrind ./your_app

资源监控

Xrestop 监控,使用参见 Xrestop介绍

xwininfo
该工具可以显示一个窗口的详细信息,包括窗口的 ID、位置、大小、边框宽度等信息;
xprop
该工具可以查看窗口的属性,例如窗口名称、窗口图标、窗口类等。
xev
该工具可以监视 X 服务器上的所有事件,包括键盘事件、鼠标事件、窗口事件等;
xtrace
该工具可以捕获并记录 X 服务器上的所有通信,包括客户端和服务器之间的所有数据;

# 捕获X11通信协议
xtrace -n -o log.xt your_program
x11trace -d :0 | grep DestroyWindow

xdotool
鼠标、键盘模拟器,它在 Linux 系统下使用,并且可以让用户通过命令行执行各种与用户输入有关的任务。xdotool 可以模拟按键、鼠标点击、移动鼠标指针、获取窗口信息等。

wmctrl
wmctrl是一个用于与窗口管理器交互的命令行工具。它提供了一些功能,可以获取和修改当前打开的窗口的信息,如窗口标题、位置、大小等。

问题定位:misc 类型资源持续上涨

通过Xrestop监测发现客户端开启关闭窗口会有Msic类型资源持续上涨(通常是指那些不属于明确分类(如窗口、像素图、字体等)的资源泄漏,每次泄漏数量4,经过代码剥离最小范围代码明确SDL_CreateWindow,SDL_DestoryWindow 会引发Msic资源泄漏,Xorg 内存上涨.,说明 Xorg 中存在未正确释放的非核心资源。以下是系统性排查方案及解决方案:


一、明确 “misc” 资源的具体类型

Xorg 的 misc 资源通常包含以下类型(可通过源码确认):

// xserver/include/resource.h
#define RT_NONE          0
#

相关文章:

  • 存储引擎 / 事务 / 索引
  • 实操(多线程特点、健壮性降低、缺乏访问控制)Linux
  • Django和Celery实现的异步任务案例
  • 小学诗词大会竞赛活动实施方案
  • Qwen-Agent框架的文件相关操作:从Assistant到BasicDocQA
  • 《比特城传奇:公钥、私钥与网络安全的守护之战》
  • 【Mac 从 0 到 1 保姆级配置教程 11】- Mac 基础配置 Finder、触控板、常用快捷键等
  • 数据库访问工具 dbVisitor v6.0.0 发布
  • 从零实现本地大模型RAG部署
  • PostgreSQL 16深度解析(从16.0-16.8)
  • 正则表达式 - 简介
  • 【算法】堆排序
  • jeecg拦截器 排除地址不让他拦截
  • 使用傅里叶级数和Python表示方波
  • 深度解析新能源汽车研发测试中的关键信号采集技术
  • Qt实现鼠标拖动窗口
  • Java 基础-32-枚举-枚举的应用场景
  • Flink介绍——实时计算核心论文之Storm论文详解
  • 以太网安全
  • 达芬奇20正式版 Davinci Resolve Studio 20 支持WIN
  • 深圳南山 网站建设/网站编辑seo
  • 自己做的网站和ie不兼容/百度一下百度网页官
  • 深圳做电商平台网站/怎么做业务推广技巧
  • 中国建筑设计咨询公司/优化排名推广关键词
  • 青海网站建设公司哪家好/网站推广的方式有哪些
  • 成都最好的网站建设公司/产品软文代写