Elasticsearch内存那些事儿

2023-11-09

 

Elasticsearch 内存分配设置详解。

前言

「该给 ES 分配多少内存?」
「为什么是给 ES 分配服务器的一半内存?」
「为什么内存使用率不断升高,没有释放?」
「为何经常有某个 field 的数据量超出内存限制的异常?」
「为何感觉上没多少数据,也会经常 Out Of Memory?」

相信每个ES使用者或者运维人员都遇到过这些问题,也踩过不少坑。

这里根据我个人的学习和日常工作的使用心得,谈一谈 Elasticsearch 的内存那些事儿。

一、Elasticsearch为什么吃内存

  • ES 是 JAVA 应用
  • 底层存储引擎是基于 Lucene 的

1. 是JAVA应用,就离不开JVM和GC

对 JVM GC 这里不做深入探讨,我们只要知道:应用层面生成大量长生命周期的对象,是给 heap 造成压力的主要原因。

例如读取一大片数据在内存中进行排序,或者在 heap 内部建 cache 缓存大量数据。如果 GC 释放的空间有限,而应用层面持续大量申请新对象,GC 频度就开始上升,同时会消耗掉很多CPU时间。严重时可能恶性循环,导致整个集群停工。因此在使用 ES 的过程中,要知道哪些设置和操作容易造成以上问题,有针对性的予以规避。

2. Lucene的倒排索引是先在内存里生成

Lucene 的倒排索引(Inverted Index)是先在内存里生成,然后定期以段文件(segment file)的形式刷到磁盘的。

每个段实际就是一个完整的倒排索引,并且一旦写到磁盘上就不会做修改。API 层面的文档更新和删除实际上是增量写入的一种特殊文档,会保存在新的段里。不变的段文件易于被操作系统 cache,热数据几乎等效于内存访问。

二、Elasticsearch的内存消耗

1. 预留一半内存给Lucene使用

我们经常在网上看见别人说「预留一半内存给Lucene使用」。很多人不理解这句话,一开始我也不理解。

举个实际场景,假设你有一个 64 G 内存的机器,按照正常思维思考,肯定是把 64 G 内存都给 Elasticsearch 比较好,但现实却不是这样。

毋庸置疑,内存对于 Elasticsearch 来说绝对是重要的,但还有一个内存消耗大户 —— Lucene。

Lucene 的设计目的是把底层 OS 里的数据缓存到内存中。Lucene 的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同时操作系统也会把这些段文件缓存起来,以便更快的访问。
Lucene 的性能取决于和 OS 的交互,如果你把所有的内存都分配给 Elasticsearch,不留一点给 Lucene,那你的全文检索性能会很差的。

所以,不难理解为何官方建议 heap size 不要超过系统可用内存的一半,因为 heap 以外的内存并不会被浪费,Lucene 会很开心的利用他们来 cache 被用读取过的段文件。

2. 不要超过32G

这里有另外一个原因不分配大内存给 Elasticsearch,事实上 jvm 在内存小于 32 G 的时候会采用一个内存对象指针压缩技术。

在 Java 中,所有的对象都分配在堆上,然后有一个指针引用它。指向这些对象的指针大小通常是 CPU 的字长的大小,不是 32 bit 就是 64 bit,这取决于你的处理器,指针指向了你的值的精确位置。

对于 32 位系统,你的内存最大可使用 4 G。对于 64 系统可以使用更大的内存。但是 64 位的指针意味着更大的浪费,因为你的指针本身大了。浪费内存不算,更糟糕的是,更大的指针在主内存和缓存器(例如 LLC,L1 等)之间移动数据的时候,会占用更多的带宽。

Java 使用一个叫内存指针压缩的技术来解决这个问题。它的指针不再表示对象在内存中的精确位置,而是表示偏移量。这意味着 32 位的指针可以引用 40 亿个对象,而不是 40 亿个字节。最终,也就是说堆内存长到 32 G 的物理内存,也可以用 32 bit 的指针表示。

一旦你越过那个神奇的 30 - 32 G 的边界,指针就会切回普通对象的指针,每个对象的指针都变长了,就会使用更多的 CPU 内存带宽,也就是说你实际上失去了更多的内存。事实上当内存到达 40 - 50 GB 的时候,有效内存才相当于使用内存对象指针压缩技术时候的 32 G 内存。

这段描述的意思就是说:即便你有足够的内存,也尽量不要超过 32 G,因为它浪费了内存,降低了 CPU 的性能,还要让 GC 应对大内存。

3. JVM参数

从官方建议,Heap 分配不要超过系统可用内存的一半,并且不要超过 32 GB 。那么 JVM 参数呢?对于初级用户来说,并不需要做特别调整,仍然遵从官方的建议,将 Xms 和 Xmx 设置成和 heap 一样大小,避免动态分配 heap size 就好了。虽然有针对性的调整 JVM 参数可以带来些许 GC 效率的提升,当有一些「坏」用例的时候,这些调整并不会有什么魔法效果帮你减轻 heap 压力,甚至可能让问题更糟糕。

确保 Xms 和 Xmx 的大小是相同的,其目的是为了能够在 java 垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源,可以减轻伸缩堆大小带来的压力。

4. ES的几个内存消耗大户

通过查阅资料,了解到有几个 ES 的内存消耗大户,就是他们把 ES 的 heap 瓜分掉的:

  • segment memory
  • filter cache
  • field data cache
  • bulk queue
  • indexing buffer
  • state buffer
  • 超大搜索聚合结果集的 fetch
  • 对高 cardinality 字段做 terms aggregation

下面对它们分别做解读:

Segment Memory

Segment 不是file 吗?segment memory 又是什么?

前面提到过,一个 segment 是一个完备的 lucene 倒排索引,而倒排索引是通过词典(Term Dictionary)到文档列表(Postings List)的映射关系,快速做查询的。

由于词典的 size 会很大,全部装载到 heap 里不现实,因此 Lucene 为词典做了一层前缀索引(Term Index),这个索引在 Lucene4.0 以后采用的数据结构是 FST(Finite State Transducer)。这种数据结构占用空间很小,Lucene 打开索引的时候将其全量装载到内存中,加快磁盘上词典查询速度的同时减少随机磁盘访问次数。

说了这么多,要传达的一个意思就是,ES 的 data node 存储数据并非只是耗费磁盘空间的,为了加速数据的访问,每个 segment 都有会一些索引数据驻留在 heap 里。

因此 segment 越多,瓜分掉的 heap 也越多,并且这部分 heap 是无法被 GC 掉的!理解这点对于监控和管理集群容量很重要,当一个 node 的 segment memory 占用过多的时候,就需要考虑删除、归档数据,或者扩容了。

怎么知道 segment memory 占用情况呢?CAT API 可以给出答案。

 

bash

# 查看一个索引所有segment的memory占用情况,重点看size.segment这一列 GET /_cat/segments/cc-xxxx-2018-03-20?v&h=shard,segment,size,size.segment # 查看一个node上所有segment占用的memory总和 GET /_cat/nodes?v&h=name,port,sm

那么有哪些途径减少 data node上 的 segment memory 占用呢? 总结起来有三种方法:

  • 删除不用的索引
  • 关闭索引
    文件仍然存在于磁盘,只是释放掉内存,需要的时候可以重新打开。
  • 段合并
    定期对不再更新的索引做 force merge api(ES2.0 及更早版本叫做 optimize)。也就是强制段合并,可以节省大量的 segment memory。

Request cache(5.x以前叫做Filter Cache)

Request cache 是用来缓存查询中参数 size=0 的请求,所以就不会缓存 hits 而是缓存 hits.total,aggregations 和 suggestions,需要注意的是这个缓存也是常驻 heap,在被 evict 掉之前,是无法被 GC 的。我的经验是默认的 10% heap 设置工作得够好了,如果实际使用中 heap 没什么压力的情况下,才考虑加大这个设置。

Field Data cache

在有大量排序、数据聚合的应用场景,可以说 field data cache 是性能和稳定性的杀手。

对搜索结果做排序或者聚合操作,需要将倒排索引里的数据进行解析,按列构造成 docid -> value 的形式才能够做后续快速计算。

对于数据量很大的索引,这个构造过程会非常耗费时间,因此 ES2.0 以前的版本会将构造好的数据缓存起来,提升性能。但是由于 heap 空间有限,当遇到用户对海量数据做计算的时候,就很容易导致 heap 吃紧,集群频繁 GC ,根本无法完成计算过程。

ES2.0以后,正式默认启用 Doc Values 特性(1.x 需要手动更改 mapping 开启),将 field data 在 indexing time 构建在磁盘上,经过一系列优化,可以达到比之前采用 field data cache 机制更好的性能。因此需要限制对 field data cache 的使用,最好是完全不用,可以极大释放 heap 压力。

需要注意的是,很多人已经升级到 ES2.0,或者 1.0 里已经设置 mapping 启用了 doc values,在 kibana 里仍然会遇到问题。

这里一个陷阱就在于 kibana 的 table panel 可以对所有字段排序。设想如果有一个字段是 analyzed 过的,而用户去点击对应字段的排序表头是什么后果?一来排序的结果并不是用户想要的,排序的对象实际是词典;二来 analyzed 过的字段无法利用 doc values,需要装载到 field data cache,数据量很大的情况下可能集群就在忙着 GC 或者根本出不来结果。

Bulk Queue

一般来说,Bulk queue 不会消耗很多的 heap,但是见过一些用户为了提高 bulk 的速度,客户端设置了很大的并发量,并且将 bulk Queue 设置到不可思议的大,比如好几千。

Bulk Queue 是做什么用的?当所有的 bulk thread 都在忙,无法响应新的 bulk request 的时候,将 request 在内存里排列起来,然后慢慢清掉。

这在应对短暂的请求爆发的时候有用,但是如果集群本身索引速度一直跟不上,设置的好几千的 queue 都满了会是什么状况呢?取决于一个 bulk 的数据量大小,乘上 queue 的大小,heap 很有可能就不够用,内存溢出了。

一般来说官方默认的 thread pool 设置已经能很好的工作了,建议不要随意去「调优」相关的设置,很多时候都是适得其反的效果。

Indexing Buffer

Indexing Buffer 是用来缓存新数据,当其满了或者 refresh/flush interval 到了,就会以 segment file 的形式写入到磁盘。

这个参数的默认值是 10% heap size。根据经验,这个默认值也能够很好的工作,应对很大的索引吞吐量。

但有些用户认为这个 buffer 越大吞吐量越高,因此见过有用户将其设置为 40% 的。到了极端的情况,写入速度很高的时候,40% 都被占用,导致 OOM。

Cluster State Buffer

ES 被设计成每个 node 都可以响应用户的 api 请求,因此每个 node 的内存里都包含有一份集群状态的拷贝。

这个 cluster state 包含诸如集群有多少个 node,多少个 index,每个 index 的 mapping 是什么?有少 shard,每个 shard 的分配情况等等 (ES 有各类 stats api 获取这类数据)。

在一个规模很大的集群,这个状态信息可能会非常大的,耗用的内存空间就不可忽视了。并且在 ES2.0 之前的版本,stat e的更新是由 master node 做完以后全量散播到其他结点的。频繁的状态更新就可以给 heap 带来很大的压力。在超大规模集群的情况下,可以考虑分集群并通过 tribe node 连接做到对用户 api 的透明,这样可以保证每个集群里的 state 信息不会膨胀得过大。

超大搜索聚合结果集的 fetch

ES 是分布式搜索引擎,搜索和聚合计算除了在各个 data node 并行计算以外,还需要将结果返回给汇总节点进行汇总和排序后再返回。

无论是搜索,还是聚合,如果返回结果的 size 设置过大,都会给 heap 造成很大的压力,特别是数据汇聚节点。超大的 size 多数情况下都是用户用例不对,比如本来是想计算 cardinality,却用了 terms aggregation + size:0 这样的方式; 对大结果集做深度分页;一次性拉取全量数据等等。

对高 cardinality 字段做 terms aggregation

所谓高 cardinality,就是该字段的唯一值比较多。

比如 client ip,可能存在上千万甚至上亿的不同值。对这种类型的字段做 terms aggregation 时,需要在内存里生成海量的分桶,内存需求会非常高。如果内部再嵌套有其他聚合,情况会更糟糕。

在做日志聚合分析时,一个典型的可以引起性能问题的场景,就是对带有参数的 url 字段做 terms aggregation。对于访问量大的网站,带有参数的 url 字段 cardinality 可能会到数亿,做一次 terms aggregation 内存开销巨大,然而对带有参数的 url 字段做聚合通常没有什么意义。

对于这类问题,可以额外索引一个 url_stem 字段,这个字段索引剥离掉参数部分的 url。可以极大降低内存消耗,提高聚合速度。

5. 小结

  • 倒排词典的索引需要常驻内存,无法 GC,需要监控 data node 上segment memory 增长趋势。
  • 各类缓存,field cache, filter cache, indexing cache, bulk queue 等等,要设置合理的大小,并且要应该根据最坏的情况来看 heap 是否够用,也就是各类缓存全部占满的时候,还有 heap 空间可以分配给其他任务吗?避免采用 clear cache 等「自欺欺人」的方式来释放内存。
  • 避免返回大量结果集的搜索与聚合。确实需要大量拉取数据的场景,可以采用 scan & scroll api 来实现。
  • cluster stats 驻留内存并无法水平扩展,超大规模集群可以考虑分拆成多个集群通过 tribe node 连接。
  • 想知道 heap 够不够,必须结合实际应用场景,并对集群的 heap 使用情况做持续的监控。
  • 根据监控数据理解内存需求,合理配置各类 circuit breaker,将内存溢出风险降低到最低。

三、Elasticsearch节点的内存怎么分配

上面说过,32 GB 是 ES 一个内存设置限制,那如果你的机器有很大的内存怎么办呢?现在的机器内存普遍都大,一般都有 300 - 500 GB 内存的机器。

当然,如果有这种机器,那是极好的,接下来有两个方案:

  • 如果主要做全文检索,可以考虑给 Elasticsearch 32 G 内存,剩下的交给 Lucene 用作操作系统的文件系统缓存,所有的 segment 都缓存起来,会加快全文检索。
  • 如果需要更多的排序和聚合,那就需要更大的堆内存。可以考虑一台机器上创建两个或者更多的 ES 节点,而不要部署一个使用 32 + GB 内存的节点。仍然要坚持 50% 原则,假设你有个机器有 128 G 内存,你可以创建两个 node,使用 32 G 内存。也就是说 64 G 内存给 ES 的堆内存,剩下的 64 G 给 Lucene。

PS:如果选择第二种方案,需要配置 cluster.routing.allocation.same_shard.host: true。这会防止同一个 shard 的主副本存在同一个物理机上(因为如果存在一个机器上,副本的高可用性就没有了)。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch内存那些事儿 的相关文章

  • 部署elk集群6

    文章目录 一 集群环境 二 部署es 1 192 168 4 115 2 192 168 4 116 3 192 168 4 118 4 启动测试 5 加入开启自启动 6 故障 三 部署logstash 1 官方地址 2 解压安装 3 创建
  • 【基于Docker-Compose安装ELK日志系统完整操作步骤】

    一 前言 ELK是三个开源软件的缩写 分别是Elasticsearch Logstash Kibana 一般情况下会结合FileBeat使用 Elasticsearch 是个开源分布式搜索引擎 它的特点有 分布式 零配置 自动发现 索引自动
  • ELK+Filebeat日志分析系统

    目录 一 ELK基本介绍 1 ELK是什么 2 组件简介 2 1 ELK组件介绍 2 2 ELFK组件介绍 2 3 其它组件 4 使用ELK的原因 5 完整日志系统的基本特征 二 Elasticsearch的介绍 三 Logstash的介绍
  • Docker + ELK + SpringBoot部署

    步骤一 Docker安装ELK镜像 docker pull sebp elk 步骤二 启动镜像 方法一 Docker部署 docker run e ES JAVA OPTS Xms256m Xmx256m 设置虚拟机所需内存大小 p 560
  • ES学习之分片路由

    本文主要内容 1 路由一个文档到一个分片 2 新建 索引和删除请求 3 取回单个文档 4 局部单个文档 5 多文档模式 6 理解一下ES深度分页 from size 的劣势 路由一个文档到一个分片 当索引一个文档的时候 文档会被存储到一个主
  • Kibana 导出csv

    过几秒就会出现下面这图 直接点击Download即可
  • java编写es搜索程序

    开发环境 java8 springboot pom文件导入依赖
  • elasticsearch 编写java程序报错Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch

    java程序启动报错 Exception in thread main java lang NoClassDefFoundError org elasticsearch plugins NetworkPlugin ERROR StatusL
  • ELK日志平台搭建(一)

    ELK企业级日志分析系统 ELK是由Elasticsearch Logstash Kiban三个开源软件的组合 在实时数据检索和分析场合 三者通常是配合共用 而且又都先后归于 Elastic co 公司名下 故有此简称 ELK中日志处理步骤
  • node settings must not contain any index level settings

    本人安装的ES是7 6 1版本 报错意思为 节点设置不能包含任何索引级别设置 也就是说报错是因为 在elasticsearce yml文件中对索引进行了配置 应该是新版本不支持这样配置 删除相应的索引配置即可 index refresh i
  • ELK 日志分析搭建

    目录 一 ELK概述 1 1 概述 1 1 1 Elasticsearch概述 1 1 2 Logstash概述 1 1 3 kibana概述 1 2 ELK解决处理的事务 1 3 ELK优点 二 ELK 搭建操作 2 1 实验配置环境 2
  • elasticsearch7.9 修改指定JDK

    错误 future versions of Elasticsearch will require Java 11 your Java version from usr local nlp java jdk1 8 0 162 jre does
  • ELK之Elasticsearch常用DSL语句(kibana语句)

    DSL 是什么 DSL Domain Specific Language 的缩写 中文翻译为领域特定语言 Wikipedia 对于 DSL 的定义还是比较简单的 A specialized computer language designe
  • ELK企业级日志分析系统

    ELK概述 为什么要使用 ELK 日志主要包括系统日志 应用程序日志和安全日志 系统运维和开发人员可以通过日志了解服务器软硬件信息 检查配置过程中的错误及错误发生的原因 经常分析日志可以了解服务器的负荷 性能安全性 从而及时采取措施纠正错误
  • ELK系列(二)、在Kibana中使用RESTful操作ES库

    上一篇讲了如何安装ELK ELK系列 一 安装ElasticSearch Logstash Kibana Filebeat v7 7 0 这篇介绍如何使用kibana连接ES并操作 先介绍一下ES和关系型数据库的概念对应 在ES7以前的版本
  • 使用python和snapshot备份ElasticSearch索引数据

    该python备份snapshot的索引数据脚本 通过Elasticsearch连接es 然后通过es indices get alias函数获取所有索引名称 通过列表的startswith函数剔除 开头的自带索引名称 然后把所有索引名称放
  • ElasticSearch 6.3版本(ES)查询人名关键字不拆词查询

    ElasticSearch 6 3版本 ES 查询关键字不拆词查询 类似mysql 的 like 语句 mysql的sql语法类似如下 采用大量like和locate语法 进行模糊查询 导致查询一个需要8秒多 通过ES优化后 总的查询在1秒
  • [分布式] zookeeper集群与kafka集群

    目录 一 Zookeeper 概述 1 1 Zookeeper定义 1 2 Zookeeper 工作机制 1 3 Zookeeper 特点 1 4 Zookeeper 数据结构 1 5 Zookeeper 应用场景 1 6 Zookeepe
  • 大数据笔记--ELK(第一篇)

    一 ELK介绍 1 什么是ELK ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案 是三个产品的首字母缩写 分别是ElasticSearch Logstash 和 Kibana 1 1 E ELASTICSEARCH
  • SpringBoot整合ELK教程

    SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch Logstash Kibana 组合起来可以搭建线上日志系统 本文主要讲解使用 ELK 来收集测试框架产生的日志 Elasticsearch 用于存储

随机推荐

  • CWE-125: Out-of-bounds Read(越界读取)

    ID 125 类型 基础 结构 简单 状态 草稿 描述 软件读取缓冲区之前或者之后的数据 扩展描述 通常 这会允许攻击者从其它内存位置读取敏感信息或导致崩溃 假定存在用于停止读取操作 如字符串中的nul 的哨兵变量时 当代码读取可变数量的数
  • 哨兵架构&redisCluster-Redis(五)

    上篇文章介绍了主从架构以及lua脚本 主从架构 lua脚本 Redis 四 https blog csdn net ke1ying article details 131159229 Sentinel集群 主从的搭建我们已经完成 但如果主节
  • 优化命令之top——实时显示进程动态/查看进程信息

    目录 一 top简介 二 启动TOP 2 1第一行含义 2 2第二行含义 2 3第三行含义 2 4第四行含义 2 5第五行含义 2 6第六行含义 三 top常用按键 3 1按 Z 键更改输出的颜色 我发现这让输出更容易被眼睛看到 3 2 按
  • ctypes.ArgumentError: argument 2: type 'exceptions.TypeError': Don't know how to convert parameter

    错误描述 我在用python的ctypes库调用c 的 so文件时候 出现了下面的错误 ctypes ArgumentError argument 2
  • Java权限修饰符

    权限修饰符可以用来修饰属性和方法的访问范围 本类 同包 子类 其他 private 默认 protected public 默认 是什么修饰符都不加
  • 【mcuclub】数码管

    一 实物图 二 原理图 1 数码管介绍 1 1 作用 数码管是显示器件 用来显示数字 1 2 分类 单个 1位 联排 2位 4位 8位 1 3 工作原理 1 亮灭原理 其实就是内部的照明LED 2 显示数字 甚至文字 原理 利用内部的LED
  • Qt中的QString与int、const char 、ASCII码互相转换

    1 QString 转 int bool ok QString str1 0xf8 int value1 str1 toInt ok 16 qDebug lt lt ok lt lt lt lt value1 true 248 QStrin
  • 中级课程——CSRF

    文章目录 案例 原理 挖掘 案例 原理 挖掘 挖掘详情 首先就是对目标敏感部位进行抓包分析 比如修改信息 转账 添加信息等等 通常一个数据包HTTP请求头里边都会有一个Referer 这个需要特别去验证 比如放到Burpsuit Repea
  • ARM常用汇编指令汇总

    ARM常用汇编指令汇总 text表示代码段 data初始化的数据段 bss未初始化的数据段 rodata只读数据段 global表示全局变量 CPSR寄存器数据访问 指令 目的 源 描述 MRS R0 CPSR 将CPSR的数据放到R0中
  • viper12a电路图_viper12a电磁炉电路图

    电磁炉又称为电磁灶 1957年第一台家用电磁炉诞生于德国 1972年 美国开始生产电磁炉 20世纪80年代初电磁炉在欧美及日本开始热销 电磁炉的原理是电磁感应现象 即利用交变电流通过线圈产生方向不断改变的交变磁场 处于交变磁场中的导体的内部
  • Docker 导出/导入镜像

    如果服务器网络不好或者pull不下来镜像 只能在其它网络比较好的机器上pull下来镜像 导出成一个文件 再下载上传到网络不好的机器上 然后再从文件中导出来 这样在网络不好的机器上也能使用docker镜像了 首先使用 docker image
  • python画笑脸图案-怎么用python实现画笑脸

    在Python中画笑脸可以使用turtle库实现 1 打开idel 通过idel新建一个py文件 在空白的文件中输入下面的代码按F5运行此文件就可以画笑脸了 from turtle import screensize 600 600 spe
  • 【Spark NLP】第 19 章:生产化 NLP 应用程序

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 计算机网络为什么要分层,从形而上到形而下视角的理解

    文章开始我想先亮明一下我个人的立场 个人关于世界的思考立场是偏唯心的 文章的标题其实也表明了我对于计算机网络的理解立场是从形而上出发的 计算机网络是计算机专业的同学的必修课 但很多同学学习的过程中都会觉得东西很多很杂 开始学还比较有动力 但
  • 2000系统如何查看某端口对应服务_ubuntu 默认防火墙安装、启用、查看状态

    ubuntu 9 10默认的是UFW防火墙 已经支持界面操作了 在命令行运行ufw命令就可以看到提示的一系列可进行的操作 最简单的一个操作 sudo ufw status可检查防火墙的状态 我的返回的是 不活动 sudo ufw versi
  • VS2008 常用快捷键

    VS2008常用快捷键 1 怎样调整代码排版的格式 选择 编辑 gt 高级 gt 设置文档的格式 或 编辑 gt 高级 gt 设置选中代码的格式 格式化cs代码 自动对齐 Ctrl k f 格式化aspx代码 Ctrl k d 2 怎样跳转
  • 除雾霾去朦胧增强色彩对比清晰画面调色插件 ClearPlus v2.1 Win/Mac AE/PR插件中文汉化版安装与使用

    插件介绍 ClearPlus是一款功能强大的AE超级色彩去雾插件 旨在增强包括模糊 水下和弱光视频在内的素材 它也是增强天空的理想选择 轻松灵活地使颜色变得时尚 阴影 高光使您可以在保持自然外观的同时调整图像的不同部分 阴影滑块和除雾滑块可
  • 成功解决:ModuleNotFoundError: No module named ‘amp_C‘

    在使用transformers时 在调用Trainer的时候遇到了这个问题 原因是apex包有问题 这里有解决apex安装包的多一些教程 https blog csdn net Xidian185 article details 12274
  • react讲解(组件,生命周期以及受控组件)

    文章目录 前言 一 组件的通信原理 state 和 setState 二 组件分类 1 类组件 2 组件中父子组件的通信 代码示例 A组件代码 B组件代码 2 跨组件通信 A组件代码如下 C组件代码如下 三 组件的生命周期
  • Elasticsearch内存那些事儿

    Elasticsearch 内存分配设置详解 前言 该给 ES 分配多少内存 为什么是给 ES 分配服务器的一半内存 为什么内存使用率不断升高 没有释放 为何经常有某个 field 的数据量超出内存限制的异常 为何感觉上没多少数据 也会经常