1"use strict";(self.webpackChunkengula_website=self.webpackChunkengula_website||[]).push([["2409"],{767:function(e,n,s){s.r(n),s.d(n,{default:()=>u});var r=s(2676),t=s(453);let i=s.p+"static/image/batch_result.6c8cb706.png",a=s.p+"static/image/batch_process.57527c9c.gif",d=s.p+"static/image/shard_example.bed7d776.png",l=s.p+"static/image/result.161db79e.png",o=s.p+"static/image/process.98e8ead0.gif";function c(e){let n=Object.assign({h1:"h1",a:"a",h2:"h2",p:"p",ul:"ul",li:"li",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td",code:"code",h3:"h3",div:"div",strong:"strong",ol:"ol",pre:"pre",blockquote:"blockquote",img:"img",h4:"h4"},(0,t.ah)(),e.components);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.h1,{id:"engula-valuesight-memory-savings-assessment-tool",children:["Engula ValueSight (Memory Savings Assessment Tool)",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula-valuesight-memory-savings-assessment-tool",children:"#"})]}),"\n",(0,r.jsxs)(n.h2,{id:"engula",children:["Engula",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"Engula is a cache kernel product developed in-house by the Engula team, designed specifically for users running open-source Redis. Its core advantage is reducing the hardware cost of existing Redis clusters with extremely low risk. Key features include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Minimal core code changes: ensures system stability and compatibility; the current public verification baseline is Redis 7.2.11, with the specific pass rate and differences detailed in proof-live."}),"\n",(0,r.jsx)(n.li,{children:"Memory savings: significantly reduces metadata overhead and is powered by an in-house Compressed HybridLog storage engine that further lowers memory usage."}),"\n",(0,r.jsx)(n.li,{children:"Performance optimization: optimizes end-to-end performance through improvements such as a redesigned HashTable implementation, an optimized network thread communication mechanism, a higher CPU prefetch hit rate, and an asynchronous thread framework."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Based on early users' real-world test results, Engula saves more than 50% of memory on average, with a performance overhead of less than 10%."}),"\n",(0,r.jsxs)(n.h2,{id:"engula-valuesight",children:["Engula ValueSight",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula-valuesight",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"Engula ValueSight is a tool that helps users quickly and accurately assess the value of Engula. Based on their own real business data, users can compare the memory usage of Engula and Redis with a single command, and quantify Engula's advantages in real business scenarios."}),"\n",(0,r.jsx)(n.p,{children:"Core features include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Measuring the RSS memory usage of the same dataset in both Engula and Redis."}),"\n",(0,r.jsx)(n.li,{children:"Generating memory usage comparison charts for clear visual analysis."}),"\n",(0,r.jsx)(n.li,{children:"Producing a memory usage analysis summary to help users understand the optimization results."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"quick-start-summary",children:["Quick Start Summary",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#quick-start-summary",children:"#"})]}),"\n",(0,r.jsxs)(n.table,{children:["\n",(0,r.jsxs)(n.thead,{children:["\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.th,{children:"Item"}),"\n",(0,r.jsx)(n.th,{children:"Content"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.tbody,{children:["\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:"Tool overview"}),"\n",(0,r.jsx)(n.td,{children:"Import a Redis RDB snapshot and generate a per-key memory comparison report of Engula vs. Redis."}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:"Prerequisites"}),"\n",(0,r.jsxs)(n.td,{children:["Docker can run on the local machine; prepare a ",(0,r.jsx)(n.code,{children:"dump.rdb"}),"; prepare an ",(0,r.jsx)(n.code,{children:"analysis_output/"})," output directory."]}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:"Qu
1ick start"}),"\n",(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'docker run -it --rm -v "$(pwd)/dump.rdb:/tmp/dump.rdb" -v "$(pwd)/analysis_output:/engula/analysis_output" registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight'})}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:"Reading the output"}),"\n",(0,r.jsx)(n.td,{children:"Focus on the total memory savings ratio, the distribution by data type, the per-key details, and any abnormally large keys."}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:"Full example"}),"\n",(0,r.jsx)(n.td,{children:'See "Running Example" below.'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"command-line-arguments",children:["Command-Line Arguments",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#command-line-arguments",children:"#"})]}),"\n",(0,r.jsxs)(n.table,{children:["\n",(0,r.jsxs)(n.thead,{children:["\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.th,{children:"Argument"}),"\n",(0,r.jsx)(n.th,{children:"Purpose"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.tbody,{children:["\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"-v <rdb>:/tmp/dump.rdb"})}),"\n",(0,r.jsx)(n.td,{children:"Specify a single RDB file."}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"-v <dir>:/tmp/rdb_dir"})}),"\n",(0,r.jsx)(n.td,{children:"Specify the RDB file directory in batch mode."}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"-v <dir>:/engula/analysis_output"})}),"\n",(0,r.jsx)(n.td,{children:"Specify the report output directory."}),"\n"]}),"\n",(0,r.jsxs)(n.tr,{children:["\n",(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"--batch"})}),"\n",(0,r.jsxs)(n.td,{children:["Scan multiple RDB files under ",(0,r.jsx)(n.code,{children:"/tmp/rdb_dir"})," and generate assessment results in batch."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"running-the-tool",children:["Running the Tool",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#running-the-tool",children:"#"})]}),"\n",(0,r.jsxs)(n.h3,{id:"runtime-environment",children:["Runtime Environment",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#runtime-environment",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"Engula ValueSight is provided as a Docker image and can run on Linux or macOS systems with Docker installed. The specific environment requirements are as follows:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"CentOS version ⥠7.9"}),"\n",(0,r.jsx)(n.li,{children:"Ubuntu version ⥠18.04"}),"\n",(0,r.jsxs)(n.li,{children:["The official Docker release is recommended (",(0,r.jsx)(n.a,{href:"https://docs.docker.com/engine/install/",target:"_blank",rel:"noopener noreferrer",children:"installation guide"}),"; prepare the image in advance if network access is slow)"]}),"\n",(0,r.jsx)(n.li,{children:"A host with at least 2 CPU cores is recommended"}),"\n"]}),"\n",(0,r.jsxs)(n.div,{className:"rspress-directive tip",children:[(0,r.jsx)(n.div,{className:"rspress-directive-title",children:"TIPS"}),(0,r.jsx)(n.div,{className:"rspress-directive-content",children:(0,r.jsxs)(n.p,{children:["If the runtime environment cannot access the public internet and cannot ",(0,r.jsx)(n.code,{children:"docker pull"})," the image, refer to the ",(0,r.jsx)(n.strong,{children:"4.5 Exporting and Importing the Image File"})," section of this document to export and import the image.\n"]})})]}),"\n",(0,r.jsxs)(n.h3,{id:"steps",children:["Steps",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#steps",children:"#"})]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Prepare the RDB file"}),": generate a Redis ",(0,r.jsx)(n.code,{children:"dump.rdb"})," file on the host where it will run (you can use the ",(0,r.jsx)(n.code,{children:"BGSAVE"})," command to generate it)."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Download the Engula ValueSight image"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Create the log directory"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# The local directory name can be changed;
1 just make sure the mapped directory in the final docker command is not misspelled\nmkdir -m 777 analysis_output\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Run the analysis"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'docker run -it --rm \\\n -v "<RDB file path>:/tmp/dump.rdb" \\\n -v "$(pwd)/analysis_output:/engula/analysis_output" \\\n registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight\n'})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Note"}),": Replace ",(0,r.jsx)(n.code,{children:"<RDB file path>"})," with the actual path to your ",(0,r.jsx)(n.code,{children:"dump.rdb"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"running-example",children:["Running Example",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#running-example",children:"#"})]}),"\n",(0,r.jsxs)(n.p,{children:["Assuming Docker is already installed on the host and there is a ",(0,r.jsx)(n.code,{children:"dump.rdb"})," file in the current directory, you can run the following commands to generate a compression assessment report for the ",(0,r.jsx)(n.code,{children:"dump.rdb"})," file:"]}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Note"}),": Engula ValueSight is updated from time to time. If you have not used it for a while, it is recommended to run the pull command first to update it."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Create the log directory\nmkdir analysis_output\n\n# Update the Engula ValueSight image\ndocker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight\n\n# Run the analysis\ndocker run -it --rm \\\n -v "$(pwd)/dump.rdb:/tmp/dump.rdb" \\\n -v "$(pwd)/analysis_output:/engula/analysis_output" \\\n registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Running Process"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)("img",{src:o,alt:"Running Process"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Result"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)("img",{src:l,alt:"Result"})}),"\n",(0,r.jsxs)(n.p,{children:["After the analysis finishes, press ",(0,r.jsx)(n.code,{children:"Enter"})," to view the details, and press ",(0,r.jsx)(n.code,{children:"Q"})," / ",(0,r.jsx)(n.code,{children:"Ctrl+C"})," to exit."]}),"\n",(0,r.jsxs)(n.h3,{id:"batch-testing-of-compression-ratio",children:["Batch Testing of Compression Ratio",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#batch-testing-of-compression-ratio",children:"#"})]}),"\n",(0,r.jsxs)(n.h4,{id:"steps-1",children:["Steps",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#steps-1",children:"#"})]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Create the necessary directories"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Create the directory for RDB files\nmkdir rdb_dir\n\n# Create the log directory\nmkdir analysis_output\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Place the RDB files"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Move the RDB files you want to analyze into the ",(0,r.jsx)(n.code,{children:"rdb_dir"})," directory."]}),"\n",(0,r.jsx)(n.li,{children:"Subdirectory structures are supported."}),"\n",(0,r.jsxs)(n.li,{children:["The program automatically scans all files with the ",(0,r.jsx)(n.code,{children:".rdb"})," extension."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Pull the analysis tool image"}),":"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Run the batch compression assessment command"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'docker run -it --rm \\\n -v "$(pwd)/rdb_dir:/tmp/rdb_dir" \\\n -v "$(pwd)/analysis_output:/engula/analysis_output" \\\n registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight --batch\n'})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The paths for ",(0,r.jsx)(n.code,{children:"rdb_dir"})," and ",(0,r.jsx)(n.code,{children:"analysis_output"})," must match the directories you actually created."]}),"\n",(0,r.jsx)(n.li,{children:"Carefully check the mapped path configuration to avoid problems caused by incorrect paths."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"shard-calculation-feature",children:["Shard Calculation Feature",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#shard-calculation-feature",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"The last underscore followed by a number in the RDB file name is treated as the number of shards and is factored
1into the final calculation, in order to obtain a more accurate estimate of the scale of memory savings."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)("img",{src:d,alt:"Shard Example"})}),"\n",(0,r.jsxs)(n.p,{children:["In the example above, ",(0,r.jsx)(n.code,{children:"r_profile_100w_1000.rdb"})," is treated as having 1000 shards."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Running Process"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)("img",{src:a,alt:"Running Process"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Result"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)("img",{src:i,alt:"Result"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Contents of the analysis_output Directory"})}),"\n",(0,r.jsxs)(n.p,{children:["For ",(0,r.jsx)(n.code,{children:"dump_1.rdb"}),", there will be four files:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"_dump_1.rdb_cmd_output_for_engula.log // Log of dump_1.rdb during the engula assessment\n_dump_1.rdb_cmd_output_for_redis.log // Log of dump_1.rdb during the redis assessment\n_dump_1.rdb_engula-stats-rdb.json // Statistics of dump_1.rdb in engula\n_dump_1.rdb_redis-stats-rdb.json // Statistics of dump_1.rdb in redis\n"})}),"\n",(0,r.jsxs)(n.p,{children:["A separate set of related files is generated for each RDB file. If you care about the details, or if errors occur, you can obtain the relevant information from these files.\nIn addition, an ",(0,r.jsx)(n.code,{children:"info.log"})," file is generated to record general log information."]}),"\n",(0,r.jsxs)(n.h3,{id:"running-in-the-background",children:["Running in the Background",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#running-in-the-background",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"Since multiple RDB files need to be assessed in batch, the processing time may be long. It is recommended to run the task in the background to improve efficiency and avoid a long wait."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'nohup docker run --rm \\\n -v "$(pwd)/rdb_dir:/tmp/rdb_dir" \\\n -v "$(pwd)/analysis_output:/engula/analysis_output" \\\n registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight --batch \\\n > analysis_output/docker.log 2> analysis_output/docker.error.log &\n'})}),"\n",(0,r.jsx)(n.p,{children:"You can check the task progress in the following ways:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# View the output log\ntail -f analysis_output/docker.log\n\n# View the error log\ntail -f analysis_output/docker.error.log\n"})}),"\n",(0,r.jsxs)(n.h2,{id:"faq",children:["FAQ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#faq",children:"#"})]}),"\n",(0,r.jsxs)(n.h3,{id:"41-docker-memory-setting-too-small",children:["4.1 Docker Memory Setting Too Small",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#41-docker-memory-setting-too-small",children:"#"})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Symptom"}),"\nAn error occurs at runtime:\n",(0,r.jsx)(n.code,{children:"Error2: Child process quit abnormally, ExitCode=9"})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Cause and Solution"}),"\nThis error is usually caused by insufficient Docker memory due to an overly large RDB file. Recommendations:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Increase the memory allocation in the Docker Desktop settings (⥠4GB recommended)."}),"\n",(0,r.jsx)(n.li,{children:"Split a large RDB file and process it in batches."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"42-debugging-methods",children:["4.2 Debugging Methods",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#42-debugging-methods",children:"#"})]}),"\n",(0,r.jsxs)(n.p,{children:["After the analysis is complete, the ",(0,r.jsx)(n.code,{children:"analysis_output"})," directory contains the program's runtime logs and statistics, which can be used for debugging. If you run into problems, you can contact the Engula team for assistance."]}),"\n",(0,r.jsxs)(n.h3,{id:"43-installing-the-system-docker-version-on-red-hat",children:["4.3 Installing the System Docker Version on Red Hat",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#43-installing-the-system-docker-version-on-red-hat",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"On Red Hat Linux 9, the Docker version installed with the following command does not meet the requirements for this test."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yum install docker -y\n\ndocker --version\n# podman version 4.9.4-rhel\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It is recommended to install Docker according to the ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/engine/install/rhel/",target:"_blank",rel:"noopener noreferrer",children:"official Docker documentation"}),". The specific steps are as follows:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Uninstall old versions"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo yum remove docker \\\n docker-client \\\n docker-client-latest \\\n docker-common \\\n docker-latest \\\n docker-latest-logrotate \\\n docker-logrotate \\\n docker-engine \\\n podman \\\n runc\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Install yum-utils and add the official Docker repository"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo yum install -y yum-utils\nsudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Install the latest version of Docker"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Start the Docker service"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo systemctl start docker\n"})}),"\n",(0,r.jsxs)(n.h3,{id:"44-batch-mode-error-rdb-file-not-found",children:['4.4 Batch Mode Error: "rdb file not found"',(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#44-batch-mode-error-rdb-file-not-found",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"By default, the program in the image does not run as the root user; this error may be caused by that."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Solution"}),":\nAdd ",(0,r.jsx)(n.code,{children:"--user root"})," to the batch command."]}),"\n",(0,r.jsxs)(n.h3,{id:"45-exporting-and-importing-the-image-file",children:["4.5 Exporting and Importing the Image File",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#45-exporting-and-importing-the-image-file",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Step 1. Export"})}),"\n",(0,r.jsx)(n.p,{children:"On a machine that can access the public internet:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker pull --platform=amd64 registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight\ndocker save registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight > engula-valuesight.tar.gz\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Tip"}),": If the CPU architecture of the internet-connected machine differs from that of the target test machine, you need to set the ",(0,r.jsx)(n.code,{children:"--platform"})," argument to the CPU architecture of the target test machine; for X86, this is ",(0,r.jsx)(n.code,{children:"amd64"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Step 2. Copy"})}),"\n",(0,r.jsxs)(n.p,{children:["Copy the exported ",(0,r.jsx)(n.code,{children:"tar.gz"})," file to the target test machine."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Step 3. Import"})}),"\n",(0,r.jsx)(n.p,{children:"On the target test machine:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker load -i engula-valuesight.tar.gz\ndocker images | grep valuesight\n"})}),"\n",(0,r.jsxs)(n.h2,{id:"contact-us",children:["Contact Us",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#contact-us",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"If you encounter any problems while using Engula or Engula ValueSight, or if you would like to learn more about our products, feel free to contact us at any time:"}),"\n",(0,r.jsxs)(n.p,{children:["Email: ",(0,r.jsx)(n.a,{href:"mailto:[email protected]",children:"[email protected]"})]}),"\n",(0,r.jsx)(n.p,{children:"The Engula team will respond to your inquiries promptly on business days from 9:00 to 18:00 (UTC+8)."})]})}function h(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,t.ah)(),e.components);return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}let u=h;h.__RSPRESS_PAGE_META={},h.__RSPRESS_PAGE_META["en%2Fdocs%2Ftools%2Fvaluesight.md"]={toc:[{text:"Engula",id:"engula",depth:2},{text:"Engula ValueSight",id:"engula-valuesight",depth:2},{text:"Quick Start Summary",id:"quick-start-summary",depth:2},{text:"Command-Line Arguments",id:"command-line-arguments",depth:3},{text:"Running the Tool",id:"running-the-tool",depth:2},{text:"Runtime Environment",id:"runtime-environment",depth:3},{text:"Steps",id:"steps",depth:3},{text:"Running Example",id:"running-example",depth:3},{text:"Batch Testing of Compression Ratio",id:"batch-testing-of-compression-ratio",depth:3},{text:"Steps",id:"steps-1",depth:4},{text:"Shard Calculation Feature",id:"shard-calculation-feature",depth:3}
1,{text:"Running in the Background",id:"running-in-the-background",depth:3},{text:"FAQ",id:"faq",depth:2},{text:"4.1 Docker Memory Setting Too Small",id:"41-docker-memory-setting-too-small",depth:3},{text:"4.2 Debugging Methods",id:"42-debugging-methods",depth:3},{text:"4.3 Installing the System Docker Version on Red Hat",id:"43-installing-the-system-docker-version-on-red-hat",depth:3},{text:'4.4 Batch Mode Error: "rdb file not found"',id:"44-batch-mode-error-rdb-file-not-found",depth:3},{text:"4.5 Exporting and Importing the Image File",id:"45-exporting-and-importing-the-image-file",depth:3},{text:"Contact Us",id:"contact-us",depth:2}],title:"Engula ValueSight (Memory Savings Assessment Tool)",headingTitle:"Engula ValueSight (Memory Savings Assessment Tool)",frontmatter:{}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.