LWN:要提供更好的 OOM 调试工具!

一次简单的线上OOM调试 对于一般的项目而言,异常通知都还未完善的时候,作为开发人员,最好能每天都选个时间,进行下线上项目的日志的跟踪,看是否有出现那些异常,这样就能避免直到客户电话反馈才知道问题的尴尬,以及提升客户体验。好了废话不多说,直接进入主题。 今天一早,刚打开其中一个线上项目的日志文件,一串:java.lang.OutOfMemoryError: Java heap space的异常,(图片)分外显眼。于是第一 阅读详情

关注了就能看到更多这么棒的文章哦~

Better tools for out-of-memory debugging

By Jonathan Corbet
May 11, 2022
LSFMM
DeepL assisted translation
https://lwn.net/Articles/894546/

Out-of-memory(OOM)的情况是用户、系统管理员以及内核开发人员都很怕面对的。通常人们只知道某处正在使用大量内存,而系统内存已经全用完了,但内核几乎没有提供太多信息来帮助人们弄清内存去哪里了。在 2022 年 Linux 存储、文件系统、内存管理和 BPF 峰会(LSFMM)的内存管理会议上,Kent Overstreet 问道,怎样才能改善 OOM 报告出来的信息,并减少所有参与者的痛苦。

他介绍到,当 OOM 问题发生时,内核会向系统日志写一份报告,但这些报告往往不包括由 slab allocator 管理的内存的相关信息。有时候可能收集了数百份这种报告,但仍然未能确认出问题在哪里。通过他一直在研究的一个新的上报系统(在 LWN 中有简单介绍),这种报告中只包括分配内存最多的十个 slab,这往往就是对他最有用的信息了。对于调试 OOM 问题来说,更重要的是关于内核 shrinker 功能的信息,这些 shrinker 负责在其他地方需要内存的时候从 cache 中回收内存。报告中目前还没有关于 shrinker 正在做什么的相关信息,但是 Overstreet 的新报告机制可以包括对每个 shrinker 的请求,以及 shrinker 实际能够释放多少内存。

0b11ff5cb51a576331d2ec1999940827.png

他说,这些信息很有用,但这只是一个开始。自 2006 年以来,OOM 报告代码一直没有多少变化,而且已经显得老化过时了,有很大的改进空间。在 OOM 报告方面做了很多工作的 Johannes Weiner 补充说,即使是 2006 年的工作其实也是 "大部分是重构性质的"。大家普遍认为,开发人员需要更好的工具来解决这些内存耗尽的情况。

Overstreet 说,问题的一部分是,以人类可读的方式从内核输出信息并不容易。虽然有各种 "漂亮 print 机制" 可用,大部分是以特殊的 printk() format specifier 描述符的形式。但这些都隐藏在 printk() 代码中,很难找到,漂亮的打印方式最好放在管理它们所打印的数据的代码中。他说,有了正确的基础设施,内核可以有 "成千上万的 pretty printers",输出会变得更好。

关于具体如何改进 OOM 报告,他建议增加速率限制来作为第一步。比如说,一旦都已经打印了十几份报告,那后续的就不可能再有什么价值了。重新组织报告内容,将内核空间和用户空间的内存信息分开则会很有帮助。关于 page allocato 中的碎片情况的信息是必要的,如上所述,需要更多关于 shrinker 的信息。

Weiner 说,过去的报告只打印最耗费内存的任务,而不是所有的任务,但由于某种原因,这个机制被删除了。Michal Hocko 回答说,把最重要的任务挑出来打印出来并不容易,它需要对 task list 加锁,这个操作开销很大。除此之外,关于系统状态的部分信息可能会产生误导,使人很难得到完整了解;如果任务的数量让系统不堪重负了,那么其实就不用关心那几个最主要的内存消耗者了。报告中应该有什么内容是需要取决于当时的情况的。例如,如果一个 GFP_NOWAIT 分配请求最终失败了,那么可能就跟 shrinker (在这种情况下不会被调用)无关了。对于高 order 的内存分配也是如此,在这种情况下,compaction 工作也会失败,开发者需要知道原因。他说,现在报告中的内容是一种妥协,也就是只有那些通常情况下有用的信息。

Overstreet 说,报告的内容必定会是妥协的结果,但有可能创造出比内核现在的更好的报告。Hocko 说,他平时必须处理大量的 OOM 报告,他的感觉是,报告中的数字实在太多了。他经常想做的是检查 slab allocator 所使用的内存相对于 LRU list 上的内存的比例。如果 LRU 内存占主导地位,那么问题几乎肯定在用户空间,报告中如果能明确指出这种情况,就会有所帮助。

Weiner 建议先提供最有用的 summary 信息;其余的信息可以在之后进行。这些报告中数据是否太多则不一定是个问题,尤其是如果这个机制也有速率限制的话。Hocko 反驳说,虽然速率限制在理论上来说是不错的,但实际上并不会奏效。问题是 printk()会很慢,尤其是在使用 serial console 的时候。仅仅把报告中的所有信息打印出来就会使机器瘫痪,而且触发速率控制会需要太长时间。

Ira Weiny 问道,为什么内存可以被分配出去而内核却不知道它去了哪里。问题是,这里并没有用于追踪的基础设施。Overstreet 说,他有一种机制,可以按调用地点来跟踪内存使用情况,效率很高,足以在生产系统中使用。它采用了 dynamic debugging 机制。pr_debug() 宏被修改为在调用位置创建一个静态结构,放在它自己的 ELF 内。然后,这个机制可以用来把 kmalloc()的调用 wrap 起来,从而记住它们来自哪里。

Hocko 问,现有的 tracing 机制不够吗?Overstreet 回答说,他希望有一个始终处于开启状态的东西,这样他就可以在任何时候来查看分配数量。Paul McKenney 建议使用一个 BPF 程序,在地图上存储调用位置的信息。不过,Weiner 回答说,他曾经试过一次,初看起来很容易,做起来要更棘手。有一些情况,例如在中断处理程序中释放内存,就是很难处理的。

会议结束时没有得出什么确切的结论。Overstreet 最后说,他一直在内核中 "发现一些实现得不太好东西",而且开发人员没有以他们本来应该做的方式来看待内存分配。如果幸运的话,将来会有更好的工具来改善这种状况。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

73086ccdbf23291f8efd651ae4be6f89.png

slub debug 内核存在内存泄漏时,通过kmemleak无法有效分析或怀疑是slab存在内存泄露,则可使用slabinfo信息进行debug。 阅读详情

相关推荐

linux出现oom分析流程

linux OOM 分析介绍

chengwei_peng 7992

OOM故障排查指南:生成 JVM 内存快照并使用快照分析工具定位问题

Heap Dump是 JVM 堆内存的静态快照,它记录了堆内存中所有对象的详细信息,包括:对象的类型和数量。对象的大小。对象的引用关系。通过分析 Heap Dump,开发者可以快速定位内存泄漏、内存占用过高或其他内存相关问题。排查OOM故障的关键在于生成和分析堆内存快照(Heap Dump)。通过使用JProfiler和VisualVM等工具,开发者可以快速定位内存泄漏、内存分配过大或资源竞争等问题。生成 Heap Dump通过 JVM 参数自动生成,或使用 IDEA 内置工具手动生成。

秃头之旅 2399

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析

把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。

Smell_of_earth的博客 299

LWN:针对二进制格式的一些好用工具!

关注了就能看到更多这么棒的文章哦~Some useful tools for binary formatsFebruary 28, 2023This article was contributed by Koen VervloesemFOSDEMAI assisted translationhttps://lwn.net/Articles/924133/Linux 用户经常使用文本文件;grep、...

Linux News搬运工 2406

03.Linux下目录动态扩容,以分配home的部分空间给root为例

本篇文章将介绍Linux下分配home目录的部分空间给root目录。大致思路:卸载home,解除其磁盘容量占用->扩容root,增加其磁盘空间->重建恢复home操作演示环境为CentOS系统,其他操作系统例如openEuler也可作为参考。01.Linux下目录扩容,以增加root目录的磁盘容量分配为例操作系统版本如下名称版本CentOS7.6+

ChennyWJS的博客 2336

基于STM32的工业设备状态监测系统

工业设备的预测性维护需求日益增长,本文设计了一款基于STM32的智能监测终端,可实时采集设备振动、温度、电流等关键参数,通过边缘计算分析设备健康状态,实现故障预警与能效优化。系统支持4G/LoRa远程通信,适用于工厂、发电站等工业场景。本系统实现了工业设备关键参数的实时监测,故障识别准确率达到92%。:STM32F429(带FPU,支持浮点运算)多参数联合判据(振动+温度+电流突变检测)ACS712电流检测模块(0-30A)FFT频谱分析(识别轴承故障特征频率)故障代码生成(支持16种预设故障类型)

stm32d1219的博客 1321

Linux内存问题排查工具

oom_score OOM(Out of Memory)其实是内核的一种保护机制。它监控进程的内存使用情况,并且使用 oom_score 为每个进程的内存使用情况进行评分: 一个进程消耗的内存越大,oom_score 就越大; 一个进程运行占用的 CPU 越多,oom_score 就越小。 进程的 oom_score 越大,代表消耗的内存越多,也就越容易被 OOM 杀死,从而可以更好...

TiktokLiveTool官方博客 332

大数据知识面试题-通用(2026版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 2万+

LWN:2022年底总结!

关注了就能看到更多这么棒的文章哦~Wrapping up 2022By Jonathan CorbetDecember 21, 2022DeepL assisted translationhttps://lwn.net/Articles/917752/又是一年即将过去。这说明现在是时候来重复 LWN 的一个长期传统了:回顾我们在一月份所做的预测,并给予应有的嘲弄。请继续阅读,看看这些预测是如何进行...

Linux News搬运工 833

YOLOv8与注意力机制融合:EMA(高效多维注意力)的原理剖析与实战应用

本文介绍了如何在YOLOv8目标检测模型中集成EMA(高效多尺度注意力)机制。主要内容包括:EMA注意力机制的工作原理解析,展示其多尺度特征融合和高效计算特性;详细的环境配置与依赖安装指南;EMA模块的完整代码实现,包含分组处理、空间注意力权重计算和特征融合等关键步骤;以及将EMA集成到YOLOv8网络结构的方法。通过添加EMA模块,可以提升模型对关键特征的关注能力,有效抑制背景干扰,从而增强目标检测性能。本教程提供了从原理到实现的完整解决方案。

m0_64661770的博客 146

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7065

OOM分析工具

OOM (OutOfMemoryError) 1、MAT工具   在eclipse中安装。Help>Eclipse Marketplace 搜索MAT   接下来运行程序,run configrations,配置如下参数;然后运行,并刷新项目,会产生.hprof文件,双击打开即可。      第一个是:初始化堆大小   第二个是:最大堆大小   第三个是:配置输出du...

aiwugang8319的博客 1003

YOLOv11改进策略【卷积层】| CVPR-2024 PKI Module 获取多尺度纹理特征,适应尺度变化大的目标

PKI Module是。

Limiiiing的博客 2705

LWN:通用的地址空间隔离方案!

关注了就能看到更多这么棒的文章哦~Generalized address-space isolationBy Jonathan CorbetMarch 3, 2022DeepL assisted translationhttps://lwn.net/Articles/886494/Meltdown 和 Spectre 漏洞的披露,让人们看到了太广泛地地址空间共享会带来的风...

Linux News搬运工 689

4D毫米波雷达:高度信息与微多普勒效应

4D毫米波雷达:高度信息与微多普勒效应​ ,人工智能,计算机视觉,大模型,AI,本文深入解析4D毫米波雷达的高度信息获取与微多普勒效应。4D毫米波雷达通过MIMO技术、垂直天线布局及相位差计算等获取高度信息,相较传统雷达更精准。微多普勒效应由目标微运动引发,可用于目标识别、分类和运动监测。文中结合自动驾驶、安防监控案例,分析技术挑战与未来趋势,如信号干扰、数据处理复杂,未来将向高精度、与其他传感器融合发展,展现出在多领域的巨大应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

第八章 GPU Scheduler 分析:8.3 drm_sched_entity — 调度实体

本文介绍了DRM GPU调度器中的drm_sched_entity结构,它作为用户提交命令进入调度器的提交通道,解决了归属、排序和公平性问题。文章首先分析了命令提交的归属需求,然后详细阐述了entity的核心模型,包括其职责、进程映射关系和核心字段。接着说明了用户态提交进入内核后的关键节点路径,以及entity内部的FIFO语义和激活机制。entity通过组织同一context的命令提交包为FIFO队列,使调度器能够在多个entity之间进行优先级和公平性调度,同时保证同一提交通道的顺序执行。

图形/计算GPU的驱动与虚拟化技术分享园地 644

LWN:LWN的2020年预测!

关注了就能看到更多这么棒的文章哦~LWN's 2020 visionByJonathan CorbetJanuary 1, 2020原文来自:https://lwn.net/A...

Linux News搬运工 471

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LWN: 2019年LWN年终总结!

关注了就能看到更多这么棒的文章哦~A year-end wrap-up from LWNByJonathan CorbetDecember 18, 2019原文来自:https://l...

Linux News搬运工 1853

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LWN:GCC也支持BPF了!

关注了就能看到更多这么棒的文章哦~BPF in GCCBy Jake EdgeSeptember 15, 2020LPC原文来自:https://lwn.net/Articles/831...

Linux News搬运工 1198

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

linux分析oom工具,Linux内核OOM机制分析

标签:oom一 应用场景描述线上一台mongos出现OOM情况,于是花点时间想要详细了解Linux内核的OOM机制原理,便于以后再作分析$sudogrepmongos/var/log/messagesApr1015:35:38localhostsz[32066]:[xxxx]check_mongos.sh/ZMODEM:211Bytes,229BPSApr2314:...

weixin_42515822的博客 687

[lwn]Double kfree() errors

Double kfree() errors [Posted March 6, 2006 by corbet] http://lwn.net/Articles/174494/ Less than 24 hours after Coverity announced the availability of a new set of machine-detected pote

smile 898

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 389

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 219

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

微调数据集构建:清洗、标注、格式转换完整流程

摘要解决微调数据直接抓取导致的噪声污染、模式崩溃与Token错位问题。适用于需为大模型SFT阶段构建高质量训练集的数据与算法工程师。读完可获得包含启发式清洗、MinHash去重及ChatML格式对齐的完整可运行数据流水线。关键词数据清洗、MinHash去重、数据标注、ChatML、SFT数据集、数据配比背景与问题大模型微调效果的上限由数据质量决定,直接使用未经处理的原始语料极易引发模型复读、幻觉与指令遵循能力退化。

2402_85729970的博客 485

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205
上一篇: LWN:如何处理硬件出错导致的错误page-cache page?
下一篇: LWN:回收未用的页表页的多种方法!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值