• linux系统优化措施汇总-持续更新


    内存锁定

    原理

    linux虚拟内存-swap

    当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in

    内存锁-mlock、mlockall

    内存锁就是将进程的虚拟内存的部分或者全部锁进内存以确保它们总是位于物理内存中,一是可以确保永远不会因为分页故障发生延迟(提升性能),二是敏感数据不会被写入磁盘。

    实际应用-elasticsearch memory_lock开关

    • 见https://www.elastic.co/guide/en/elasticsearch/reference/current/_memory_lock_check.html
      jvm做垃圾回收的时候,它会访问堆中每个page,换出(swapped out)到磁盘上的page不得不重新被加载到内存。这样会在处理请求的基础上,叠加更多的磁盘访问,对系统性能造成影响。
      Elasticsearch可以通过系统层面禁用swap或者在进程级别配置bootstrap.memory_lock来实现锁定内存。
    实现

    jdk本身没有提供锁定内存的api,如果需要锁定内存,可以通过jni去调用linux的api达到目的。下面是elasticsearch的实现
    org.elasticsearch.bootstrap.JNANatives

        static void tryMlockall() {
            int errno = Integer.MIN_VALUE;
            String errMsg = null;
            boolean rlimitSuccess = false;
            long softLimit = 0;
            long hardLimit = 0;
    
            try {
                int result = JNACLibrary.mlockall(JNACLibrary.MCL_CURRENT);
                ... ...
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    org.elasticsearch.bootstrap.JNACLibrary

    static native int mlockall(int flags);
    
    • 1
  • 相关阅读:
    Apollo预测模块启动及调试
    Python中不为人知的四个特性
    C语言 Cortex-A7核 IIC实验
    MYSQL(索引+SQL优化)
    Java 基础——运行第一个Java程序:hello world
    DC-9 靶机
    C# yolov8 OpenVINO 同步、异步接口视频推理
    python -pandas -处理excel合并单元格问题
    HTML表格合并行和列
    【腾讯云原生降本增效大讲堂】京东云原生大规模实践之路
  • 原文地址:https://blog.csdn.net/shuxiaohua/article/details/127792929