如何使用Linux服务器内存交换提升性能

老实说,内存问题确实很烦人。
我曾经管理一台旧服务器,但内存非常有限,错误不断出现。
在这三个主要问题中,内存空间不足来加载应用程序的问题是最直观的——当你点击某个应用程序时,屏幕会变白,就像没电一样,交换空间用完也是正常的。
当时我们立即直接安装了新的有效内存条。
但转念一想,仅仅加内存还不够。
你必须了解Linux如何使用内存。

我一直遇到缓存问题。
记得有一次系统在做PPT时突然卡住了。
检查了半天,发现缓存满了。
Linux系统中有一个阈值,我记得它是总RAM的3 0%——如果可用内存加上缓冲内存低于这个数字,那么就意味着服务器即将失败。
当时我检查了/proc/meminfo,发现非活动内存比cache还多。
显然缓存不起作用。
这背后的原因可能有很多:要么是程序太重,没有消耗足够的内存;要么是程序太重,没有消耗足够的内存;或者磁盘太慢,无法写出文件,导致缓冲区中堆积脏数据(高 Dirty 参数)。
此时,增加内存只能治标,不能治本。
首先要检查是程序问题还是磁盘问题。
如果磁盘速度很慢,升级硬盘或优化I/O性能是关键。

频繁改变交换空间就更麻烦了。
使用vmstat可以看到si(swap to memory)和类似(memory to swap)的数量不断增加,交换空间几乎已满。
我当时管理的服务器的交换容量实际上大于不活动内存,这意味着活动内存页面也被换出。
这显然是由于物理内存不足造成的。
然后我们添加了swappiness参数——说白了,它让Linux更倾向于使用交换空间。
结果是内存性能实际上得到了提高。
但要注意,将交换设置得太高不一定是好事。
这取决于系统的具体条件。
最重要的是确保内存页面保留在正确的位置。
频繁的换入换出肯定会震动系统。

这些体验可以用真钱换取。
如果内存问题解决不好,服务器的响应速度和稳定性都会受到影响。
所以你看,仅仅增加内存是不够的。
您必须了解 Linux 内存是如何管理的以及交换空间是如何使用的。
每台服务器的情况都不同,所以您必须单独检查和调整每台服务器。

如何处理Linux系统中频繁出现的内存耗尽问题

哈,Linux内存不足真是烦人啊……上周,一个客户的服务器因为内存溢出而崩溃了。
让我们一步一步地看看如何系统地解决它。
不要只看命令,您需要知道如何使用它们:
1 .首先,让我们看看内存是什么样的。
1 .使用free-m查看,具体可用和buff/cache。
上次我在广东的机房调试时,发现某台服务器的可用性已经下降到总内存的8 %以下,而buffer/cache仍然很高。
最后我发现一个监控脚本疯狂占用内存。
请记住,buff/cache实际上并不是免费的,它只是内核缓存并且可以回收。
2 . 再次运行 vmstat 1 以查看交换。
去年我在上海某云厂商机房调优时,发现si/so不断不为0,CPU却提升了2 00%。
最后,我发现数据库备份过程已经秘密变得非常大。
此时系统已经在使用硬盘作为内存了,性能直接降低了一半。

2 找到记忆小偷 1 . top -o %MEM 或 htop 按内存排序。
上次帮成都外包团队调优,发现Java进程占用了5 0%的内存,并且还在不断增长。
我检查了pmap -x,发现JVM调优参数错误。
对于 C/C++ 开发使用 strace -p,对于 Java 开发使用 jmap -histo。
2 .在开发环境中使用valgrind memcheck是正确的。
去年我在杭州的时候我在测试系统的时候,发现某个模块内存耗尽后并没有释放,所以就直接使用了这种情况。
在生产环境中,使用system命令。

3 该采取行动时就采取行动 1 . 内核参数:sysctl -w vm.swappiness=1 0 以减少交换倾向。
上次我在贵州的一个运营商机房尝试过,效果立竿见影。
vm.overcommit_memory=2 严格模式也是可以的,不过要看业务能否容忍。
2 . 限制进程:unimit -v 为单个进程,或者使用cgroups。
上次帮助武汉一家电商实现高可用时,我给订单处理流程设置了内存限制。
容器化环境直接调整--memory参数。
3 .压缩内存:zswap和zram都可以使用。
我尝试了zram,得到了1 G压缩内存,省了不少钱。
不过,压缩是有损的,这取决于CPU是否足够高效。
4 . 清除缓存: echo 1 > /proc/sys/vm/drop_caches 释放页面缓存。
上次在成都一家游戏公司做活动的时候用过它,确实可以腾出一些空间。
但不要太频繁使用,尤其是Echo 3 ,因为可能会耽误业务很长时间。

4 如果这不起作用,请添加硬件 1 、如果内存长期超过8 0%,优化还不够,请增加内存。
虚拟机直接调整配置,改变容器的resources.limits。
是。
我在西安一家银行测试的时候,只能加4 G内存就搞定了。
2 .考虑NUMA架构?上次帮助苏州的一个金融客户搭建集群时,我使用numactl将进程连接到内存节点,跨节点访问延迟确实降低了。
但这取决于服务器是否支持。

5 最后,一些监控 1 、使用Prometheus+Grafana时,内存达到8 5 %时会发出警报。
当我在南京为操作员工作时,我编写了一个脚本,用于在内存不足时自动重新启动进程。
2 . OOM 调优: echo -1 5 > /proc//oom_adj 降低被杀的风险。
上次在长沙一家电商公司工作的时候就尝试过,核心流程都没有做完。
systemd-oomd 比较先进,但是要看系统是否支持。

这些技巧我都试过了,有些还需要根据具体情况进行调整。
如果您能给我具体的服务器型号、内存大小、系统版本,我可以给您更详细的建议。
无论如何,你可以了解一下。
让我们从 free -m 和 vmstat 开始。

linux进程占用内存高的原因

上星期。
我的这位朋友。
Linux 进程。
内存使用情况。
太高了。

2 02 3 我的这位朋友。
告诉我。
可能的原因。

1 .内存泄漏。
代码逻辑问题:代码。
有缺陷。
例如。
在循环中。
不断地要求记忆。
没有释放。
示例:循环。
创建链表节点。
没有删除。
已经很久了。
记忆力越来越高。
资源管理不善:文件描述符。
网络连接。
管理不好。
示例:打开许多文件。
没有关闭。
内存很忙。

两个。
该过程的算法非常复杂。
复杂的 IT 任务:任务。
数学运算。
计算机科学。
非常复杂。
示例:大规模矩阵运算。
需要大量内存。
记录中间结果。
深度递归调用:过度使用递归。
每次通话。
消耗堆栈空间。
示例:递归太深。
堆栈空间。
变得越来越大。
内存使用量增加。

三。
数据缓存不合理。
缓存数据太多:为了性能。
隐藏大量数据。
管理不好。
示例:数据缓存。
超出实际需要。
已到期。
没有清理干净。
内存很忙。
糟糕的缓存策略:策略。
不适合舞台。
经常打击。
废弃。
消耗内存。
示例:使用LRU 策略。
没有优化。
浪费内存。

四。
内存映射错误。
映射文件太大:错误。
放置大文件。
映射到内存中。
示例:大型日志文件。
完全映射。
真实的。
只需要一部分。
浪费内存。
映射设置错误:映射期间。
环境。
设置错误。
示例:映射区域。
不像预期的那样。
占用太多内存。

五。
系统配置问题。
内存分配太大:进程已启动。
初始值。
分配内存。
太大了。
示例:命令行参数。
指定的内存量很大。
真实的。
这并不需要太多。
它占用很大的空间。
交换空间不足:物理内存。
不够。
使用交换空间。
示例:空间交换。
小的。
经常交流。
内存使用情况。
看起来很高。

我不确定这部分。
这是你的。
没关系。