<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pavel Pustovalov</title>
    <description>The latest articles on DEV Community by Pavel Pustovalov (@pustovalov_p).</description>
    <link>https://dev.to/pustovalov_p</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F130112%2Fb4aa4a7d-e2ba-4f7f-ba72-1e0bbdcd68aa.jpg</url>
      <title>DEV Community: Pavel Pustovalov</title>
      <link>https://dev.to/pustovalov_p</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pustovalov_p"/>
    <language>en</language>
    <item>
      <title>Reducing Jest Memory Usage</title>
      <dc:creator>Pavel Pustovalov</dc:creator>
      <pubDate>Mon, 25 May 2020 18:01:02 +0000</pubDate>
      <link>https://dev.to/pustovalov_p/reducing-jest-memory-usage-1ina</link>
      <guid>https://dev.to/pustovalov_p/reducing-jest-memory-usage-1ina</guid>
      <description>&lt;p&gt;Sometimes this problem occurs on the CI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Summary of all failing tests
  ● Test suite failed to run

    ENOMEM: not enough memory, &lt;span class="nb"&gt;read

      &lt;/span&gt;at Runtime.readFile &lt;span class="o"&gt;(&lt;/span&gt;node_modules/jest-runtime/build/index.js:1880:21&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node 12.16.3
yarn 1.22.4
jest 26.0.1

Circle CI container 2 CPU / 4 GB RAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Earlier tests were run by this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn jest app/javascript --forceExit --ci -w=2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for debugging, run the tests in one thread:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node ./node_modules/.bin/jest app/javascript --forceExit --ci -w=1

Test Suites: 100 passed, 100 total
Tests:       1163 passed, 1163 total
Snapshots:   186 passed, 186 total
Time:        89.236 s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maximum RAM usage (&lt;a href="https://gist.github.com/pustovalov/430f5af07e50c3702bf773cc1abc51eb"&gt;full log&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;56660:0x103fe3000]    91511 ms: Scavenge 1465.3 &lt;span class="o"&gt;(&lt;/span&gt;1535.5&lt;span class="o"&gt;)&lt;/span&gt; -&amp;gt; 1459.2 &lt;span class="o"&gt;(&lt;/span&gt;1539.8&lt;span class="o"&gt;)&lt;/span&gt; MB, 12.4 / 0.0 ms  &lt;span class="o"&gt;(&lt;/span&gt;average mu &lt;span class="o"&gt;=&lt;/span&gt; 0.974, current mu &lt;span class="o"&gt;=&lt;/span&gt; 0.951&lt;span class="o"&gt;)&lt;/span&gt; allocation failure 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If run specs with &lt;code&gt;expose-gc&lt;/code&gt; and &lt;code&gt;logHeapUsage&lt;/code&gt; parameters, you will see a decrease in RAM usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node --expose-gc ./node_modules/.bin/jest app/javascript --forceExit --ci -w=1 --logHeapUsage

Test Suites: 100 passed, 100 total
Tests:       1163 passed, 1163 total
Snapshots:   186 passed, 186 total
Time:        95.85 s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maximum RAM usage (&lt;a href="https://gist.github.com/pustovalov/52b5387dd417cada0454956c1dd49823"&gt;full log&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;57108:0x103fe3000]    18741 ms: Scavenge 533.1 &lt;span class="o"&gt;(&lt;/span&gt;552.0&lt;span class="o"&gt;)&lt;/span&gt; -&amp;gt; 524.6 &lt;span class="o"&gt;(&lt;/span&gt;555.7&lt;span class="o"&gt;)&lt;/span&gt; MB, 5.1 / 0.0 ms  &lt;span class="o"&gt;(&lt;/span&gt;average mu &lt;span class="o"&gt;=&lt;/span&gt; 0.988, current mu &lt;span class="o"&gt;=&lt;/span&gt; 0.979&lt;span class="o"&gt;)&lt;/span&gt; allocation failure 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these two parameters Jest will run garbage collection (&lt;a href="https://github.com/facebook/jest/blob/v26.0.1/packages/jest-runner/src/runTest.ts#L291"&gt;source&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;globalConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logHeapUsage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;global&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gc&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;memoryUsage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;memoryUsage&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;heapUsed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Run node with &lt;code&gt;expose-gc&lt;/code&gt; and jest with &lt;code&gt;logHeapUsage&lt;/code&gt; parameters, can decrease maximum memory consumption without increasing tests execution time, in my case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1539.8 MB -&amp;gt; 555.7 MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>jest</category>
      <category>testing</category>
      <category>javascript</category>
      <category>node</category>
    </item>
  </channel>
</rss>
