diff --git a/.github/workflows/__extractor-ram-threads.yml b/.github/workflows/__extractor-ram-threads.yml
new file mode 100644
index 000000000..dd916d568
--- /dev/null
+++ b/.github/workflows/__extractor-ram-threads.yml
@@ -0,0 +1,63 @@
+# Warning: This file is generated automatically, and should not be modified.
+# Instead, please modify the template in the pr-checks directory and run:
+#     pip install ruamel.yaml && python3 sync.py
+# to regenerate this file.
+
+name: PR Check - Extractor ram and threads options test
+env:
+  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  GO111MODULE: auto
+on:
+  push:
+    branches:
+    - main
+    - v1
+  pull_request:
+    types:
+    - opened
+    - synchronize
+    - reopened
+    - ready_for_review
+  workflow_dispatch: {}
+jobs:
+  extractor-ram-threads:
+    strategy:
+      matrix:
+        version: [latest]
+        os: [ubuntu-latest]
+    name: Extractor ram and threads options test
+    runs-on: ${{ matrix.os }}
+    steps:
+    - name: Check out repository
+      uses: actions/checkout@v2
+    - name: Prepare test
+      id: prepare-test
+      uses: ./.github/prepare-test
+      with:
+        version: ${{ matrix.version }}
+    - uses: ./../action/init
+      with:
+        languages: java
+        ram: 230
+        threads: 1
+    - name: Assert Results
+      shell: bash
+      run: |
+        if [ "${CODEQL_RAM}" != "230" ]; then
+          echo "CODEQL_RAM is '${CODEQL_RAM}' instead of 230"
+          exit 1
+        fi
+        if [ "${CODEQL_EXTRACTOR_JAVA_RAM}" != "230" ]; then
+          echo "CODEQL_EXTRACTOR_JAVA_RAM is '${CODEQL_EXTRACTOR_JAVA_RAM}' instead of 230"
+          exit 1
+        fi
+        if [ "${CODEQL_THREADS}" != "1" ]; then
+          echo "CODEQL_THREADS is '${CODEQL_THREADS}' instead of 1"
+          exit 1
+        fi
+        if [ "${CODEQL_EXTRACTOR_JAVA_THREADS}" != "1" ]; then
+          echo "CODEQL_EXTRACTOR_JAVA_THREADS is '${CODEQL_EXTRACTOR_JAVA_THREADS}' instead of 1"
+          exit 1
+        fi
+    env:
+      INTERNAL_CODEQL_ACTION_DEBUG_LOC: true
diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml
index 7d965b45f..704f9e31d 100644
--- a/.github/workflows/pr-checks.yml
+++ b/.github/workflows/pr-checks.yml
@@ -393,3 +393,42 @@ jobs:
           # Deliberately don't use TEST_MODE here. This is specifically testing
           # the compatibility with the API.
           runner/dist/codeql-runner-linux upload --sarif-file src/testdata/empty-sarif.sarif --repository $GITHUB_REPOSITORY --commit $GITHUB_SHA --ref $GITHUB_REF --github-url $GITHUB_SERVER_URL --github-auth ${{ github.token }}
+
+  runner-extractor-ram-threads-options:
+    name: Runner ubuntu extractor RAM and threads options
+    needs: [check-js, check-node-modules]
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Build runner
+        run: |
+          cd runner
+          npm install
+          npm run build-runner
+
+      - name: Run init
+        run: |
+          runner/dist/codeql-runner-linux init --ram=230 --threads=1 --repository $GITHUB_REPOSITORY --languages java --github-url $GITHUB_SERVER_URL --github-auth ${{ github.token }}
+
+      - name: Assert Results
+        shell: bash
+        run: |
+          . ./codeql-runner/codeql-env.sh
+          if [ "${CODEQL_RAM}" != "230" ]; then
+            echo "CODEQL_RAM is '${CODEQL_RAM}' instead of 230"
+            exit 1
+          fi
+          if [ "${CODEQL_EXTRACTOR_JAVA_RAM}" != "230" ]; then
+            echo "CODEQL_EXTRACTOR_JAVA_RAM is '${CODEQL_EXTRACTOR_JAVA_RAM}' instead of 230"
+            exit 1
+          fi
+          if [ "${CODEQL_THREADS}" != "1" ]; then
+            echo "CODEQL_THREADS is '${CODEQL_THREADS}' instead of 1"
+            exit 1
+          fi
+          if [ "${CODEQL_EXTRACTOR_JAVA_THREADS}" != "1" ]; then
+            echo "CODEQL_EXTRACTOR_JAVA_THREADS is '${CODEQL_EXTRACTOR_JAVA_THREADS}' instead of 1"
+            exit 1
+          fi
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3f269ee3d..7542f5fd9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
 
 ## [UNRELEASED]
 
-No user facing changes.
+- The `init` step of the Action now supports `ram` and `threads` inputs to limit resource use of CodeQL extractors. These inputs also serve as defaults to the subsequent `analyze` step, which finalizes the database and executes queries. [#738](https://github.com/github/codeql-action/pull/738)
 
 ## 1.0.21 - 28 Oct 2021
 
diff --git a/analyze/action.yml b/analyze/action.yml
index 1191fe2d7..6d1315754 100644
--- a/analyze/action.yml
+++ b/analyze/action.yml
@@ -18,7 +18,12 @@ inputs:
     required: false
     default: "brutal"
   ram:
-    description: Override the amount of memory in MB to be used by CodeQL. By default, almost all the memory of the machine is used.
+    description: >-
+      The amount of memory in MB that can be used by CodeQL for database finalization and query execution.
+      By default, this action will use the same amount of memory as previously set in the "init" action.
+      If the "init" action also does not have an explicit "ram" input, this action will use most of the
+      memory available in the system (which for GitHub-hosted runners is 6GB for Linux, 5.5GB for Windows,
+      and 13GB for macOS).
     required: false
   add-snippets:
     description: Specify whether or not to add code snippets to the output sarif file.
@@ -29,7 +34,12 @@ inputs:
     required: false
     default: "false"
   threads:
-    description: The number of threads to be used by CodeQL.
+    description: >-
+      The number of threads that can be used by CodeQL for database finalization and query execution.
+      By default, this action will use the same number of threads as previously set in the "init" action.
+      If the "init" action also does not have an explicit "threads" input, this action will use all the
+      hardware threads available in the system (which for GitHub-hosted runners is 2 for Linux and Windows
+      and 3 for macOS).
     required: false
   checkout_path:
     description: "The path at which the analyzed repository was checked out. Used to relativize any absolute paths in the uploaded SARIF file."
diff --git a/init/action.yml b/init/action.yml
index a25baf625..bff798928 100644
--- a/init/action.yml
+++ b/init/action.yml
@@ -41,6 +41,20 @@ inputs:
   source-root:
     description: Path of the root source code directory, relative to $GITHUB_WORKSPACE.
     required: false
+  ram:
+    description: >-
+      The amount of memory in MB that can be used by CodeQL extractors.
+      By default, CodeQL extractors will use most of the memory available in the system
+      (which for GitHub-hosted runners is 6GB for Linux, 5.5GB for Windows, and 13GB for macOS).
+      This input also sets the amount of memory that can later be used by the "analyze" action.
+    required: false
+  threads:
+    description: >-
+      The number of threads that can be used by CodeQL extractors.
+      By default, CodeQL extractors will use all the hardware threads available in the system
+      (which for GitHub-hosted runners is 2 for Linux and Windows and 3 for macOS).
+      This input also sets the number of threads that can later be used by the "analyze" action.
+    required: false
 outputs:
   codeql-path:
     description: The path of the CodeQL binary used for analysis
diff --git a/lib/analyze-action-env.test.js b/lib/analyze-action-env.test.js
new file mode 100644
index 000000000..7cdff3e32
--- /dev/null
+++ b/lib/analyze-action-env.test.js
@@ -0,0 +1,75 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ava_1 = __importDefault(require("ava"));
+const sinon = __importStar(require("sinon"));
+const actionsUtil = __importStar(require("./actions-util"));
+const analyze = __importStar(require("./analyze"));
+const configUtils = __importStar(require("./config-utils"));
+const testing_utils_1 = require("./testing-utils");
+const util = __importStar(require("./util"));
+(0, testing_utils_1.setupTests)(ava_1.default);
+// This test needs to be in its own file so that ava would run it in its own
+// nodejs process. The code being tested is in analyze-action.ts, which runs
+// immediately on load. So the file needs to be loaded during part of the test,
+// and that can happen only once per nodejs process. If multiple such tests are
+// in the same test file, ava would run them in the same nodejs process, and all
+// but the first test would fail.
+(0, ava_1.default)("analyze action with RAM & threads from environment variables", async (t) => {
+    await util.withTmpDir(async (tmpDir) => {
+        process.env["GITHUB_SERVER_URL"] = "fake-server-url";
+        process.env["GITHUB_REPOSITORY"] = "fake/repository";
+        sinon
+            .stub(actionsUtil, "createStatusReportBase")
+            .resolves({});
+        sinon.stub(actionsUtil, "sendStatusReport").resolves(true);
+        sinon.stub(configUtils, "getConfig").resolves({
+            languages: [],
+        });
+        const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
+        requiredInputStub.withArgs("token").returns("fake-token");
+        requiredInputStub.withArgs("upload-database").returns("false");
+        const optionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
+        optionalInputStub.withArgs("cleanup-level").returns("none");
+        (0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
+        // When there are no action inputs for RAM and threads, the action uses
+        // environment variables (passed down from the init action) to set RAM and
+        // threads usage.
+        process.env["CODEQL_THREADS"] = "-1";
+        process.env["CODEQL_RAM"] = "4992";
+        const runFinalizeStub = sinon.stub(analyze, "runFinalize");
+        const runQueriesStub = sinon.stub(analyze, "runQueries");
+        const analyzeAction = require("./analyze-action");
+        // When analyze-action.ts loads, it runs an async function from the top
+        // level but does not wait for it to finish. To ensure that calls to
+        // runFinalize and runQueries are correctly captured by spies, we explicitly
+        // wait for the action promise to complete before starting verification.
+        await analyzeAction.runPromise;
+        t.deepEqual(runFinalizeStub.firstCall.args[1], "--threads=-1");
+        t.deepEqual(runFinalizeStub.firstCall.args[2], "--ram=4992");
+        t.deepEqual(runQueriesStub.firstCall.args[3], "--threads=-1");
+        t.deepEqual(runQueriesStub.firstCall.args[1], "--ram=4992");
+    });
+});
+//# sourceMappingURL=analyze-action-env.test.js.map
\ No newline at end of file
diff --git a/lib/analyze-action-env.test.js.map b/lib/analyze-action-env.test.js.map
new file mode 100644
index 000000000..6869b4ff5
--- /dev/null
+++ b/lib/analyze-action-env.test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"analyze-action-env.test.js","sourceRoot":"","sources":["../src/analyze-action-env.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,6CAA+B;AAE/B,4DAA8C;AAC9C,mDAAqC;AACrC,4DAA8C;AAC9C,mDAA+D;AAC/D,6CAA+B;AAE/B,IAAA,0BAAU,EAAC,aAAI,CAAC,CAAC;AAEjB,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,iCAAiC;AAEjC,IAAA,aAAI,EAAC,8DAA8D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/E,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,iBAAiB,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,iBAAiB,CAAC;QACrD,KAAK;aACF,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC;aAC3C,QAAQ,CAAC,EAAkC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC;YAC5C,SAAS,EAAE,EAAE;SACmB,CAAC,CAAC;QACpC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACtE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1D,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACtE,iBAAiB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAA,gCAAgB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjC,uEAAuE;QACvE,0EAA0E;QAC1E,iBAAiB;QACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;QAEnC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAElD,uEAAuE;QACvE,oEAAoE;QACpE,4EAA4E;QAC5E,wEAAwE;QACxE,MAAM,aAAa,CAAC,UAAU,CAAC;QAE/B,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib/analyze-action-input.test.js b/lib/analyze-action-input.test.js
new file mode 100644
index 000000000..f3293a2c0
--- /dev/null
+++ b/lib/analyze-action-input.test.js
@@ -0,0 +1,75 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ava_1 = __importDefault(require("ava"));
+const sinon = __importStar(require("sinon"));
+const actionsUtil = __importStar(require("./actions-util"));
+const analyze = __importStar(require("./analyze"));
+const configUtils = __importStar(require("./config-utils"));
+const testing_utils_1 = require("./testing-utils");
+const util = __importStar(require("./util"));
+(0, testing_utils_1.setupTests)(ava_1.default);
+// This test needs to be in its own file so that ava would run it in its own
+// nodejs process. The code being tested is in analyze-action.ts, which runs
+// immediately on load. So the file needs to be loaded during part of the test,
+// and that can happen only once per nodejs process. If multiple such tests are
+// in the same test file, ava would run them in the same nodejs process, and all
+// but the first test would fail.
+(0, ava_1.default)("analyze action with RAM & threads from action inputs", async (t) => {
+    await util.withTmpDir(async (tmpDir) => {
+        process.env["GITHUB_SERVER_URL"] = "fake-server-url";
+        process.env["GITHUB_REPOSITORY"] = "fake/repository";
+        sinon
+            .stub(actionsUtil, "createStatusReportBase")
+            .resolves({});
+        sinon.stub(actionsUtil, "sendStatusReport").resolves(true);
+        sinon.stub(configUtils, "getConfig").resolves({
+            languages: [],
+        });
+        const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
+        requiredInputStub.withArgs("token").returns("fake-token");
+        requiredInputStub.withArgs("upload-database").returns("false");
+        const optionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
+        optionalInputStub.withArgs("cleanup-level").returns("none");
+        (0, testing_utils_1.setupActionsVars)(tmpDir, tmpDir);
+        process.env["CODEQL_THREADS"] = "1";
+        process.env["CODEQL_RAM"] = "4992";
+        // Action inputs have precedence over environment variables.
+        optionalInputStub.withArgs("threads").returns("-1");
+        optionalInputStub.withArgs("ram").returns("3012");
+        const runFinalizeStub = sinon.stub(analyze, "runFinalize");
+        const runQueriesStub = sinon.stub(analyze, "runQueries");
+        const analyzeAction = require("./analyze-action");
+        // When analyze-action.ts loads, it runs an async function from the top
+        // level but does not wait for it to finish. To ensure that calls to
+        // runFinalize and runQueries are correctly captured by spies, we explicitly
+        // wait for the action promise to complete before starting verification.
+        await analyzeAction.runPromise;
+        t.deepEqual(runFinalizeStub.firstCall.args[1], "--threads=-1");
+        t.deepEqual(runFinalizeStub.firstCall.args[2], "--ram=3012");
+        t.deepEqual(runQueriesStub.firstCall.args[3], "--threads=-1");
+        t.deepEqual(runQueriesStub.firstCall.args[1], "--ram=3012");
+    });
+});
+//# sourceMappingURL=analyze-action-input.test.js.map
\ No newline at end of file
diff --git a/lib/analyze-action-input.test.js.map b/lib/analyze-action-input.test.js.map
new file mode 100644
index 000000000..b3b01c0e2
--- /dev/null
+++ b/lib/analyze-action-input.test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"analyze-action-input.test.js","sourceRoot":"","sources":["../src/analyze-action-input.test.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/analyze-action.js b/lib/analyze-action.js
index f32e92ff2..904529dc9 100644
--- a/lib/analyze-action.js
+++ b/lib/analyze-action.js
@@ -19,6 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
     return result;
 };
 Object.defineProperty(exports, "__esModule", { value: true });
+exports.runPromise = exports.sendStatusReport = void 0;
 const fs = __importStar(require("fs"));
 const path = __importStar(require("path"));
 const core = __importStar(require("@actions/core"));
@@ -44,6 +45,7 @@ async function sendStatusReport(startedAt, stats, error) {
     };
     await actionsUtil.sendStatusReport(statusReport);
 }
+exports.sendStatusReport = sendStatusReport;
 async function run() {
     const startedAt = new Date();
     let uploadStats = undefined;
@@ -65,8 +67,8 @@ async function run() {
             url: util.getRequiredEnvParam("GITHUB_SERVER_URL"),
         };
         const outputDir = actionsUtil.getRequiredInput("output");
-        const threads = util.getThreadsFlag(actionsUtil.getOptionalInput("threads"), logger);
-        const memory = util.getMemoryFlag(actionsUtil.getOptionalInput("ram"));
+        const threads = util.getThreadsFlag(actionsUtil.getOptionalInput("threads") || process.env["CODEQL_THREADS"], logger);
+        const memory = util.getMemoryFlag(actionsUtil.getOptionalInput("ram") || process.env["CODEQL_RAM"]);
         await (0, analyze_1.runFinalize)(outputDir, threads, memory, config, logger);
         if (actionsUtil.getRequiredInput("skip-queries") !== "true") {
             runStats = await (0, analyze_1.runQueries)(outputDir, memory, util.getAddSnippetsFlag(actionsUtil.getRequiredInput("add-snippets")), threads, actionsUtil.getOptionalInput("category"), config, logger);
@@ -134,9 +136,10 @@ async function run() {
         await sendStatusReport(startedAt, undefined);
     }
 }
+exports.runPromise = run();
 async function runWrapper() {
     try {
-        await run();
+        await exports.runPromise;
     }
     catch (error) {
         core.setFailed(`analyze action failed: ${error}`);
diff --git a/lib/analyze-action.js.map b/lib/analyze-action.js.map
index 63127c5e3..984e5a5b4 100644
--- a/lib/analyze-action.js.map
+++ b/lib/analyze-action.js.map
@@ -1 +1 @@
-{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/init-action.js b/lib/init-action.js
index 1a9e4c401..df16e5a2e 100644
--- a/lib/init-action.js
+++ b/lib/init-action.js
@@ -113,9 +113,14 @@ async function run() {
             core.exportVariable("GOFLAGS", goFlags);
             core.warning("Passing the GOFLAGS env parameter to the init action is deprecated. Please move this to the analyze action.");
         }
-        // Setup CODEQL_RAM flag (todo improve this https://github.com/github/dsp-code-scanning/issues/935)
-        const codeqlRam = process.env["CODEQL_RAM"] || "6500";
-        core.exportVariable("CODEQL_RAM", codeqlRam);
+        // Limit RAM and threads for extractors. When running extractors, the CodeQL CLI obeys the
+        // CODEQL_RAM and CODEQL_THREADS environment variables to decide how much RAM and how many
+        // threads it would ask extractors to use. See help text for the "--ram" and "--threads"
+        // options at https://codeql.github.com/docs/codeql-cli/manual/database-trace-command/
+        // for details.
+        core.exportVariable("CODEQL_RAM", process.env["CODEQL_RAM"] ||
+            (0, util_1.getMemoryFlagValue)((0, actions_util_1.getOptionalInput)("ram")).toString());
+        core.exportVariable("CODEQL_THREADS", (0, util_1.getThreadsFlagValue)((0, actions_util_1.getOptionalInput)("threads"), logger).toString());
         const sourceRoot = path.resolve((0, util_1.getRequiredEnvParam)("GITHUB_WORKSPACE"), (0, actions_util_1.getOptionalInput)("source-root") || "");
         const tracerConfig = await (0, init_1.runInit)(codeql, config, sourceRoot, "Runner.Worker.exe", undefined);
         if (tracerConfig !== undefined) {
diff --git a/lib/init-action.js.map b/lib/init-action.js.map
index 73f88b70c..7077c04b1 100644
--- a/lib/init-action.js.map
+++ b/lib/init-action.js.map
@@ -1 +1 @@
-{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/runner.js b/lib/runner.js
index 3bceda941..42ec87944 100644
--- a/lib/runner.js
+++ b/lib/runner.js
@@ -54,11 +54,14 @@ function getToolsDir(userInput) {
     return toolsDir;
 }
 const codeqlEnvJsonFilename = "codeql-env.json";
+function loadTracerEnvironment(config) {
+    const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename);
+    return JSON.parse(fs.readFileSync(jsonEnvFile).toString("utf-8"));
+}
 // Imports the environment from codeqlEnvJsonFilename if not already present
 function importTracerEnvironment(config) {
     if (!("ODASA_TRACER_CONFIGURATION" in process.env)) {
-        const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename);
-        const env = JSON.parse(fs.readFileSync(jsonEnvFile).toString("utf-8"));
+        const env = loadTracerEnvironment(config);
         for (const key of Object.keys(env)) {
             process.env[key] = env[key];
         }
@@ -116,6 +119,12 @@ program
     .option("--debug", "Print more verbose output", false)
     .option("--trace-process-name <string>", "(Advanced, windows-only) Inject a windows tracer of this process into a process with the given process name.")
     .option("--trace-process-level <number>", "(Advanced, windows-only) Inject a windows tracer of this process into a parent process <number> levels up.")
+    .option("--ram <number>", "The amount of memory in MB that can be used by CodeQL extractors. " +
+    "By default, CodeQL extractors will use most of the memory available in the system. " +
+    'This input also sets the amount of memory that can later be used by the "analyze" command.')
+    .option("--threads <number>", "The number of threads that can be used by CodeQL extractors. " +
+    "By default, CodeQL extractors will use all the hardware threads available in the system. " +
+    'This input also sets the number of threads that can later be used by the "analyze" command.')
     .action(async (cmd) => {
     const logger = (0, logging_1.getRunnerLogger)(cmd.debug);
     try {
@@ -134,6 +143,13 @@ program
         };
         const gitHubVersion = await (0, util_1.getGitHubVersion)(apiDetails);
         (0, util_1.checkGitHubVersionInRange)(gitHubVersion, logger, util_1.Mode.runner);
+        // Limit RAM and threads for extractors. When running extractors, the CodeQL CLI obeys the
+        // CODEQL_RAM and CODEQL_THREADS environment variables to decide how much RAM and how many
+        // threads it would ask extractors to use. See help text for the "--ram" and "--threads"
+        // options at https://codeql.github.com/docs/codeql-cli/manual/database-trace-command/
+        // for details.
+        process.env["CODEQL_RAM"] = (0, util_1.getMemoryFlagValue)(cmd.ram).toString();
+        process.env["CODEQL_THREADS"] = (0, util_1.getThreadsFlagValue)(cmd.threads, logger).toString();
         let codeql;
         if (cmd.codeqlPath !== undefined) {
             codeql = await (0, codeql_1.getCodeQL)(cmd.codeqlPath);
@@ -240,10 +256,15 @@ program
     .option("--checkout-path <path>", "Checkout path. Default is the current working directory.")
     .option("--no-upload", "Do not upload results after analysis.")
     .option("--output-dir <dir>", "Directory to output SARIF files to. Default is in the temp directory.")
-    .option("--ram <ram>", "Amount of memory to use when running queries. Default is to use all available memory.")
+    .option("--ram <ram>", "The amount of memory in MB that can be used by CodeQL for database finalization and query execution. " +
+    'By default, this command will use the same amount of memory as previously set in the "init" command. ' +
+    'If the "init" command also does not have an explicit "ram" flag, this command will use most of the ' +
+    "memory available in the system.")
     .option("--no-add-snippets", "Specify whether to include code snippets in the sarif output.")
-    .option("--threads <threads>", "Number of threads to use when running queries. " +
-    "Default is to use all available cores.")
+    .option("--threads <threads>", "The number of threads that can be used by CodeQL for database finalization and query execution. " +
+    'By default, this command will use the same number of threads as previously set in the "init" command. ' +
+    'If the "init" command also does not have an explicit "threads" flag, this command will use all the ' +
+    "hardware threads available in the system.")
     .option("--temp-dir <dir>", 'Directory to use for temporary files. Default is "./codeql-runner".')
     .option("--category <category>", "String used by Code Scanning for matching the analyses.")
     .option("--debug", "Print more verbose output", false)
@@ -262,8 +283,15 @@ program
             url: (0, util_1.parseGitHubUrl)(cmd.githubUrl),
         };
         const outputDir = cmd.outputDir || path.join(config.tempDir, "codeql-sarif");
-        const threads = (0, util_1.getThreadsFlag)(cmd.threads, logger);
-        const memory = (0, util_1.getMemoryFlag)(cmd.ram);
+        let initEnv = {};
+        try {
+            initEnv = loadTracerEnvironment(config);
+        }
+        catch (err) {
+            // The init command did not generate a tracer environment file
+        }
+        const threads = (0, util_1.getThreadsFlag)(cmd.threads || initEnv["CODEQL_THREADS"], logger);
+        const memory = (0, util_1.getMemoryFlag)(cmd.ram || initEnv["CODEQL_RAM"]);
         await (0, analyze_1.runFinalize)(outputDir, threads, memory, config, logger);
         await (0, analyze_1.runQueries)(outputDir, memory, (0, util_1.getAddSnippetsFlag)(cmd.addSnippets), threads, cmd.category, config, logger);
         if (!cmd.upload) {
diff --git a/lib/runner.js.map b/lib/runner.js.map
index 16f5b8417..a8268f84e 100644
--- a/lib/runner.js.map
+++ b/lib/runner.js.map
@@ -1 +1 @@
-{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAE7B,yCAAoC;AAEpC,uCAAoD;AACpD,2CAAuE;AACvE,qCAAyE;AACzE,iDAAmD;AACnD,iCAA8E;AAC9E,2CAAsD;AACtD,uCAA4C;AAC5C,6CAAkD;AAClD,yDAA2C;AAC3C,iCAYgB;AAEhB,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IAClD,IAAA,4BAAqB,EAAC,WAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,SAA6B;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IACvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KAC5C;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,SAA6B;IAChD,MAAM,QAAQ,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAC7E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC5B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KAC7C;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD,4EAA4E;AAC5E,SAAS,uBAAuB,CAAC,MAAc;IAC7C,IAAI,CAAC,CAAC,4BAA4B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SAC7B;KACF;AACH,CAAC;AAED,kEAAkE;AAClE,iEAAiE;AACjE,SAAS,QAAQ,CAAC,SAAiB;IACjC,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACjC,OAAO,SAAS,CAAC;KAClB;SAAM;QACL,OAAO,cAAc,SAAS,EAAE,CAAC;KAClC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,qBAAqB;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAChD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAsB,EAAE;YAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5B;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,SAAS,sBAAsB;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAChD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uBAAuB,EAAE;YAC/C,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAkBD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oBAAoB,CAAC;KACjC,cAAc,CAAC,2BAA2B,EAAE,6BAA6B,CAAC;KAC1E,cAAc,CAAC,oBAAoB,EAAE,oCAAoC,CAAC;KAC1E,MAAM,CACL,sBAAsB,EACtB,+HAA+H,CAChI;KACA,MAAM,CACL,qBAAqB,EACrB,6DAA6D,CAC9D;KACA,MAAM,CACL,yBAAyB,EACzB,qHAAqH,CACtH;KACA,MAAM,CACL,qBAAqB,EACrB,6GAA6G,CAC9G;KACA,MAAM,CACL,iBAAiB,EACjB;;;;;oEAKgE,CACjE;KACA,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACtD,MAAM,CACL,sBAAsB,EACtB,iFAAiF,CAClF;KACA,MAAM,CACL,kBAAkB,EAClB,qEAAqE,CACtE;KACA,MAAM,CACL,mBAAmB,EACnB,2HAA2H,CAC5H;KACA,MAAM,CACL,wBAAwB,EACxB,0DAA0D,CAC3D;KACA,MAAM,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACrD,MAAM,CACL,+BAA+B,EAC/B,8GAA8G,CAC/G;KACA,MAAM,CACL,gCAAgC,EAChC,4GAA4G,CAC7G;KACA,MAAM,CAAC,KAAK,EAAE,GAAa,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAEvD,oBAAoB;QACpB,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QAClD,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAC9B,MAAM,EACN,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,eAAe,CACpB,CAAC;QAEF,MAAM,UAAU,GAAG;YACjB,IAAI;YACJ,gBAAgB,EAAE,IAAI;YACtB,GAAG,EAAE,IAAA,qBAAc,EAAC,GAAG,CAAC,SAAS,CAAC;SACnC,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,IAAA,uBAAgB,EAAC,UAAU,CAAC,CAAC;QACzD,IAAA,gCAAyB,EAAC,aAAa,EAAE,MAAM,EAAE,WAAI,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,MAAc,CAAC;QACnB,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE;YAChC,MAAM,GAAG,MAAM,IAAA,kBAAS,EAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC1C;aAAM;YACL,MAAM,GAAG,CACP,MAAM,IAAA,iBAAU,EACd,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,aAAa,CAAC,IAAI,EAClB,MAAM,CACP,CACF,CAAC,MAAM,CAAC;SACV;QACD,MAAM,IAAA,wBAAiB,EAAC,WAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,YAAY,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAU,EAC7B,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,UAAU,EACd,SAAS,EACT,IAAA,+BAAkB,EAAC,GAAG,CAAC,UAAU,CAAC,EAClC,OAAO,EACP,QAAQ,EACR,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,MAAM,CACP,CAAC;QAEF,MAAM,UAAU,GAAG,YAAY,CAAC;QAChC,MAAM,YAAY,GAAG,MAAM,IAAA,cAAO,EAChC,MAAM,EACN,MAAM,EACN,UAAU,EACV,qBAAqB,EAAE,EACvB,sBAAsB,EAAE,CACzB,CAAC;QACF,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,OAAO;SACR;QAED,IACE,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,MAAM,IAAA,yBAAkB,EAAC,MAAM,EAAE,mCAA0B,CAAC,CAAC,EAC/D;YACA,MAAM,IAAA,0BAAmB,EACvB,qBAAqB,EAAE,EACvB,sBAAsB,EAAE,EACxB,MAAM,EACN,MAAM,EACN,YAAY,CACb,CAAC;SACH;QAED,6EAA6E;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACrE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAC/D,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;iBACxD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;iBAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;YAEjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACrE,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;iBAC/D,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,GAAG,KAAK,KAAK,GAAG,CAAC;iBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;YAE/D,MAAM,CAAC,IAAI,CACT,mCAAmC,WAAW,OAAO,UAAU,UAAU,iBAAiB,KAAK;gBAC7F,0FAA0F;gBAC1F,gCAAgC,UAAU,IAAI;gBAC9C,mCAAmC,iBAAiB,wBAAwB,CAC/E,CAAC;SACH;aAAM;YACL,sEAAsE;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;gBACxD,yFAAyF;iBACxF,GAAG,CACF,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACf,UAAU,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CACtD;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE/C,MAAM,CAAC,IAAI,CACT,mCAAmC,WAAW,UAAU,SAAS,KAAK;gBACpE,0FAA0F;gBAC1F,6BAA6B,SAAS,IAAI,CAC7C,CAAC;SACH;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;KACtB;AACH,CAAC,CAAC,CAAC;AAQL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CACL,uBAAuB,EACvB,8EAA8E,CAC/E;KACA,MAAM,CACL,kBAAkB,EAClB,qEAAqE,CACtE;KACA,MAAM,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,GAAkB,EAAE,EAAE;IACnC,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACrD,iFAAiF,CACpF,CAAC;SACH;QACD,MAAM,IAAA,wBAAiB,EAAC,WAAI,CAAC,MAAM,EAAE,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAyB,SAAS,CAAC;QAC/C,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC9B,QAAQ,GAAG,IAAA,yBAAa,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAClE,MAAM,IAAI,KAAK,CACb,IAAI,GAAG,CAAC,QAAQ,kCAAkC;oBAChD,uCAAuC,MAAM,CAAC,SAAS,CAAC,IAAI,CAC1D,IAAI,CACL,GAAG,CACP,CAAC;aACH;SACF;aAAM;YACL,QAAQ,GAAG,IAAA,sCAA0B,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACvD;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,MAAM,IAAA,wBAAY,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC9C;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;KACtB;AACH,CAAC,CAAC,CAAC;AAoBL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,cAAc,CAAC,2BAA2B,EAAE,6BAA6B,CAAC;KAC1E,cAAc,CACb,mBAAmB,EACnB,6CAA6C,CAC9C;KACA,cAAc,CAAC,aAAa,EAAE,2CAA2C,CAAC;KAC1E,cAAc,CAAC,oBAAoB,EAAE,oCAAoC,CAAC;KAC1E,MAAM,CACL,sBAAsB,EACtB,+HAA+H,CAChI;KACA,MAAM,CACL,qBAAqB,EACrB,6DAA6D,CAC9D;KACA,MAAM,CACL,wBAAwB,EACxB,0DAA0D,CAC3D;KACA,MAAM,CAAC,aAAa,EAAE,uCAAuC,CAAC;KAC9D,MAAM,CACL,oBAAoB,EACpB,uEAAuE,CACxE;KACA,MAAM,CACL,aAAa,EACb,uFAAuF,CACxF;KACA,MAAM,CACL,mBAAmB,EACnB,+DAA+D,CAChE;KACA,MAAM,CACL,qBAAqB,EACrB,iDAAiD;IAC/C,wCAAwC,CAC3C;KACA,MAAM,CACL,kBAAkB,EAClB,qEAAqE,CACtE;KACA,MAAM,CACL,uBAAuB,EACvB,yDAAyD,CAC1D;KACA,MAAM,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,GAAgB,EAAE,EAAE;IACjC,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACrD,iFAAiF,CACpF,CAAC;SACH;QACD,MAAM,IAAA,wBAAiB,EAAC,WAAI,CAAC,MAAM,EAAE,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAExE,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAC9B,MAAM,EACN,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,eAAe,CACpB,CAAC;QAEF,MAAM,UAAU,GAAG;YACjB,IAAI;YACJ,GAAG,EAAE,IAAA,qBAAc,EAAC,GAAG,CAAC,SAAS,CAAC;SACnC,CAAC;QAEF,MAAM,SAAS,GACb,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAA,qBAAc,EAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAA,oBAAa,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAA,qBAAW,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,IAAA,oBAAU,EACd,SAAS,EACT,MAAM,EACN,IAAA,yBAAkB,EAAC,GAAG,CAAC,WAAW,CAAC,EACnC,OAAO,EACP,GAAG,CAAC,QAAQ,EACZ,MAAM,EACN,MAAM,CACP,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO;SACR;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACrD,MAAM,UAAU,CAAC,gBAAgB,CAC/B,SAAS,EACT,IAAA,+BAAkB,EAAC,GAAG,CAAC,UAAU,CAAC,EAClC,GAAG,CAAC,MAAM,EACV,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,QAAQ,EACZ,UAAU,EACV,MAAM,CAAC,aAAa,EACpB,UAAU,EACV,MAAM,CACP,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;KACtB;AACH,CAAC,CAAC,CAAC;AAeL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CACV,6EAA6E,CAC9E;KACA,cAAc,CACb,qBAAqB,EACrB,kFAAkF,CACnF;KACA,cAAc,CAAC,2BAA2B,EAAE,6BAA6B,CAAC;KAC1E,cAAc,CACb,mBAAmB,EACnB,6CAA6C,CAC9C;KACA,cAAc,CAAC,aAAa,EAAE,2CAA2C,CAAC;KAC1E,cAAc,CAAC,oBAAoB,EAAE,oCAAoC,CAAC;KAC1E,MAAM,CACL,sBAAsB,EACtB,+HAA+H,CAChI;KACA,MAAM,CACL,qBAAqB,EACrB,6DAA6D,CAC9D;KACA,MAAM,CACL,wBAAwB,EACxB,0DAA0D,CAC3D;KACA,MAAM,CACL,uBAAuB,EACvB,yDAAyD,CAC1D;KACA,MAAM,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,GAAe,EAAE,EAAE;IAChC,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAC9B,MAAM,EACN,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,eAAe,CACpB,CAAC;IACF,MAAM,UAAU,GAAG;QACjB,IAAI;QACJ,GAAG,EAAE,IAAA,qBAAc,EAAC,GAAG,CAAC,SAAS,CAAC;KACnC,CAAC;IACF,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,IAAA,uBAAgB,EAAC,UAAU,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACrD,MAAM,UAAU,CAAC,gBAAgB,CAC/B,GAAG,CAAC,SAAS,EACb,IAAA,+BAAkB,EAAC,GAAG,CAAC,UAAU,CAAC,EAClC,GAAG,CAAC,MAAM,EACV,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,QAAQ,EACZ,UAAU,EACV,aAAa,EACb,UAAU,EACV,MAAM,CACP,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;KACtB;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/util.js b/lib/util.js
index e20a56131..8e03c2e39 100644
--- a/lib/util.js
+++ b/lib/util.js
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
     return result;
 };
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.codeQlVersionAbove = exports.isHTTPError = exports.HTTPError = exports.getRequiredEnvParam = exports.isActions = exports.getMode = exports.enrichEnvironment = exports.initializeEnvironment = exports.Mode = exports.assertNever = exports.getGitHubAuth = exports.apiVersionInRange = exports.DisallowedAPIVersionReason = exports.checkGitHubVersionInRange = exports.getGitHubVersion = exports.GitHubVariant = exports.parseGitHubUrl = exports.getCodeQLDatabasePath = exports.getThreadsFlag = exports.getAddSnippetsFlag = exports.getMemoryFlag = exports.withTmpDir = exports.getToolNames = exports.getExtraOptionsEnvParam = exports.GITHUB_DOTCOM_URL = void 0;
+exports.codeQlVersionAbove = exports.isHTTPError = exports.HTTPError = exports.getRequiredEnvParam = exports.isActions = exports.getMode = exports.enrichEnvironment = exports.initializeEnvironment = exports.Mode = exports.assertNever = exports.getGitHubAuth = exports.apiVersionInRange = exports.DisallowedAPIVersionReason = exports.checkGitHubVersionInRange = exports.getGitHubVersion = exports.GitHubVariant = exports.parseGitHubUrl = exports.getCodeQLDatabasePath = exports.getThreadsFlag = exports.getThreadsFlagValue = exports.getAddSnippetsFlag = exports.getMemoryFlag = exports.getMemoryFlagValue = exports.withTmpDir = exports.getToolNames = exports.getExtraOptionsEnvParam = exports.GITHUB_DOTCOM_URL = void 0;
 const fs = __importStar(require("fs"));
 const os = __importStar(require("os"));
 const path = __importStar(require("path"));
@@ -93,13 +93,13 @@ function getSystemReservedMemoryMegaBytes() {
     return 1024 * (process.platform === "win32" ? 1.5 : 1);
 }
 /**
- * Get the codeql `--ram` flag as configured by the `ram` input. If no value was
- * specified, the total available memory will be used minus a threshold
- * reserved for the OS.
+ * Get the value of the codeql `--ram` flag as configured by the `ram` input.
+ * If no value was specified, the total available memory will be used minus a
+ * threshold reserved for the OS.
  *
- * @returns string
+ * @returns {number} the amount of RAM to use, in megabytes
  */
-function getMemoryFlag(userInput) {
+function getMemoryFlagValue(userInput) {
     let memoryToUseMegaBytes;
     if (userInput) {
         memoryToUseMegaBytes = Number(userInput);
@@ -113,7 +113,18 @@ function getMemoryFlag(userInput) {
         const reservedMemoryMegaBytes = getSystemReservedMemoryMegaBytes();
         memoryToUseMegaBytes = totalMemoryMegaBytes - reservedMemoryMegaBytes;
     }
-    return `--ram=${Math.floor(memoryToUseMegaBytes)}`;
+    return Math.floor(memoryToUseMegaBytes);
+}
+exports.getMemoryFlagValue = getMemoryFlagValue;
+/**
+ * Get the codeql `--ram` flag as configured by the `ram` input. If no value was
+ * specified, the total available memory will be used minus a threshold
+ * reserved for the OS.
+ *
+ * @returns string
+ */
+function getMemoryFlag(userInput) {
+    return `--ram=${getMemoryFlagValue(userInput)}`;
 }
 exports.getMemoryFlag = getMemoryFlag;
 /**
@@ -130,14 +141,14 @@ function getAddSnippetsFlag(userInput) {
 }
 exports.getAddSnippetsFlag = getAddSnippetsFlag;
 /**
- * Get the codeql `--threads` value specified for the `threads` input.
- * If no value was specified, all available threads will be used.
+ * Get the value of the codeql `--threads` flag specified for the `threads`
+ * input. If no value was specified, all available threads will be used.
  *
  * The value will be capped to the number of available CPUs.
  *
- * @returns string
+ * @returns {number}
  */
-function getThreadsFlag(userInput, logger) {
+function getThreadsFlagValue(userInput, logger) {
     let numThreads;
     const maxThreads = os.cpus().length;
     if (userInput) {
@@ -159,7 +170,19 @@ function getThreadsFlag(userInput, logger) {
         // Default to using all threads
         numThreads = maxThreads;
     }
-    return `--threads=${numThreads}`;
+    return numThreads;
+}
+exports.getThreadsFlagValue = getThreadsFlagValue;
+/**
+ * Get the codeql `--threads` flag specified for the `threads` input.
+ * If no value was specified, all available threads will be used.
+ *
+ * The value will be capped to the number of available CPUs.
+ *
+ * @returns string
+ */
+function getThreadsFlag(userInput, logger) {
+    return `--threads=${getThreadsFlagValue(userInput, logger)}`;
 }
 exports.getThreadsFlag = getThreadsFlag;
 /**
diff --git a/lib/util.js.map b/lib/util.js.map
index c8bd816de..1ec424d20 100644
--- a/lib/util.js.map
+++ b/lib/util.js.map
@@ -1 +1 @@
-{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/pr-checks/checks/extractor-ram-threads.yml b/pr-checks/checks/extractor-ram-threads.yml
new file mode 100644
index 000000000..43b5b3bcf
--- /dev/null
+++ b/pr-checks/checks/extractor-ram-threads.yml
@@ -0,0 +1,29 @@
+name: "Extractor ram and threads options test"
+description: "Tests passing RAM and threads limits to extractors"
+versions: ["latest"]
+os: ["ubuntu-latest"]
+steps:
+  - uses: ./../action/init
+    with:
+      languages: java
+      ram: 230
+      threads: 1
+  - name: Assert Results
+    shell: bash
+    run: |
+      if [ "${CODEQL_RAM}" != "230" ]; then
+        echo "CODEQL_RAM is '${CODEQL_RAM}' instead of 230"
+        exit 1
+      fi
+      if [ "${CODEQL_EXTRACTOR_JAVA_RAM}" != "230" ]; then
+        echo "CODEQL_EXTRACTOR_JAVA_RAM is '${CODEQL_EXTRACTOR_JAVA_RAM}' instead of 230"
+        exit 1
+      fi
+      if [ "${CODEQL_THREADS}" != "1" ]; then
+        echo "CODEQL_THREADS is '${CODEQL_THREADS}' instead of 1"
+        exit 1
+      fi
+      if [ "${CODEQL_EXTRACTOR_JAVA_THREADS}" != "1" ]; then
+        echo "CODEQL_EXTRACTOR_JAVA_THREADS is '${CODEQL_EXTRACTOR_JAVA_THREADS}' instead of 1"
+        exit 1
+      fi
diff --git a/queries/inconsistent-action-input.ql b/queries/inconsistent-action-input.ql
index ec24fed06..d1a8cec85 100644
--- a/queries/inconsistent-action-input.ql
+++ b/queries/inconsistent-action-input.ql
@@ -47,5 +47,7 @@ predicate areNotEquivalent(YAMLValue x, YAMLValue y) {
 from ActionDeclaration actionA, ActionDeclaration actionB, string inputName
 where actionA.getName() < actionB.getName() // prevent duplicates which are permutations of the names
   and areNotEquivalent(actionA.getInput(inputName), actionB.getInput(inputName))
+  // ram and threads inputs in different actions are supposed to have different description
+  and inputName != "ram" and inputName != "threads"
 select actionA, "Action $@ and action $@ both declare input $@, however their definitions are not identical. This may be confusing to users.",
   actionA, actionA.getName(), actionB, actionB.getName(), inputName, inputName
diff --git a/src/analyze-action-env.test.ts b/src/analyze-action-env.test.ts
new file mode 100644
index 000000000..01d0aa251
--- /dev/null
+++ b/src/analyze-action-env.test.ts
@@ -0,0 +1,58 @@
+import test from "ava";
+import * as sinon from "sinon";
+
+import * as actionsUtil from "./actions-util";
+import * as analyze from "./analyze";
+import * as configUtils from "./config-utils";
+import { setupTests, setupActionsVars } from "./testing-utils";
+import * as util from "./util";
+
+setupTests(test);
+
+// This test needs to be in its own file so that ava would run it in its own
+// nodejs process. The code being tested is in analyze-action.ts, which runs
+// immediately on load. So the file needs to be loaded during part of the test,
+// and that can happen only once per nodejs process. If multiple such tests are
+// in the same test file, ava would run them in the same nodejs process, and all
+// but the first test would fail.
+
+test("analyze action with RAM & threads from environment variables", async (t) => {
+  await util.withTmpDir(async (tmpDir) => {
+    process.env["GITHUB_SERVER_URL"] = "fake-server-url";
+    process.env["GITHUB_REPOSITORY"] = "fake/repository";
+    sinon
+      .stub(actionsUtil, "createStatusReportBase")
+      .resolves({} as actionsUtil.StatusReportBase);
+    sinon.stub(actionsUtil, "sendStatusReport").resolves(true);
+    sinon.stub(configUtils, "getConfig").resolves({
+      languages: [],
+    } as unknown as configUtils.Config);
+    const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
+    requiredInputStub.withArgs("token").returns("fake-token");
+    requiredInputStub.withArgs("upload-database").returns("false");
+    const optionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
+    optionalInputStub.withArgs("cleanup-level").returns("none");
+    setupActionsVars(tmpDir, tmpDir);
+
+    // When there are no action inputs for RAM and threads, the action uses
+    // environment variables (passed down from the init action) to set RAM and
+    // threads usage.
+    process.env["CODEQL_THREADS"] = "-1";
+    process.env["CODEQL_RAM"] = "4992";
+
+    const runFinalizeStub = sinon.stub(analyze, "runFinalize");
+    const runQueriesStub = sinon.stub(analyze, "runQueries");
+    const analyzeAction = require("./analyze-action");
+
+    // When analyze-action.ts loads, it runs an async function from the top
+    // level but does not wait for it to finish. To ensure that calls to
+    // runFinalize and runQueries are correctly captured by spies, we explicitly
+    // wait for the action promise to complete before starting verification.
+    await analyzeAction.runPromise;
+
+    t.deepEqual(runFinalizeStub.firstCall.args[1], "--threads=-1");
+    t.deepEqual(runFinalizeStub.firstCall.args[2], "--ram=4992");
+    t.deepEqual(runQueriesStub.firstCall.args[3], "--threads=-1");
+    t.deepEqual(runQueriesStub.firstCall.args[1], "--ram=4992");
+  });
+});
diff --git a/src/analyze-action-input.test.ts b/src/analyze-action-input.test.ts
new file mode 100644
index 000000000..9455f76a0
--- /dev/null
+++ b/src/analyze-action-input.test.ts
@@ -0,0 +1,59 @@
+import test from "ava";
+import * as sinon from "sinon";
+
+import * as actionsUtil from "./actions-util";
+import * as analyze from "./analyze";
+import * as configUtils from "./config-utils";
+import { setupTests, setupActionsVars } from "./testing-utils";
+import * as util from "./util";
+
+setupTests(test);
+
+// This test needs to be in its own file so that ava would run it in its own
+// nodejs process. The code being tested is in analyze-action.ts, which runs
+// immediately on load. So the file needs to be loaded during part of the test,
+// and that can happen only once per nodejs process. If multiple such tests are
+// in the same test file, ava would run them in the same nodejs process, and all
+// but the first test would fail.
+
+test("analyze action with RAM & threads from action inputs", async (t) => {
+  await util.withTmpDir(async (tmpDir) => {
+    process.env["GITHUB_SERVER_URL"] = "fake-server-url";
+    process.env["GITHUB_REPOSITORY"] = "fake/repository";
+    sinon
+      .stub(actionsUtil, "createStatusReportBase")
+      .resolves({} as actionsUtil.StatusReportBase);
+    sinon.stub(actionsUtil, "sendStatusReport").resolves(true);
+    sinon.stub(configUtils, "getConfig").resolves({
+      languages: [],
+    } as unknown as configUtils.Config);
+    const requiredInputStub = sinon.stub(actionsUtil, "getRequiredInput");
+    requiredInputStub.withArgs("token").returns("fake-token");
+    requiredInputStub.withArgs("upload-database").returns("false");
+    const optionalInputStub = sinon.stub(actionsUtil, "getOptionalInput");
+    optionalInputStub.withArgs("cleanup-level").returns("none");
+    setupActionsVars(tmpDir, tmpDir);
+
+    process.env["CODEQL_THREADS"] = "1";
+    process.env["CODEQL_RAM"] = "4992";
+
+    // Action inputs have precedence over environment variables.
+    optionalInputStub.withArgs("threads").returns("-1");
+    optionalInputStub.withArgs("ram").returns("3012");
+
+    const runFinalizeStub = sinon.stub(analyze, "runFinalize");
+    const runQueriesStub = sinon.stub(analyze, "runQueries");
+    const analyzeAction = require("./analyze-action");
+
+    // When analyze-action.ts loads, it runs an async function from the top
+    // level but does not wait for it to finish. To ensure that calls to
+    // runFinalize and runQueries are correctly captured by spies, we explicitly
+    // wait for the action promise to complete before starting verification.
+    await analyzeAction.runPromise;
+
+    t.deepEqual(runFinalizeStub.firstCall.args[1], "--threads=-1");
+    t.deepEqual(runFinalizeStub.firstCall.args[2], "--ram=3012");
+    t.deepEqual(runQueriesStub.firstCall.args[3], "--threads=-1");
+    t.deepEqual(runQueriesStub.firstCall.args[1], "--ram=3012");
+  });
+});
diff --git a/src/analyze-action.ts b/src/analyze-action.ts
index 3c3bac1cd..accb05841 100644
--- a/src/analyze-action.ts
+++ b/src/analyze-action.ts
@@ -31,7 +31,7 @@ interface FinishStatusReport
   extends actionsUtil.StatusReportBase,
     AnalysisStatusReport {}
 
-async function sendStatusReport(
+export async function sendStatusReport(
   startedAt: Date,
   stats: AnalysisStatusReport | undefined,
   error?: Error
@@ -91,10 +91,12 @@ async function run() {
     };
     const outputDir = actionsUtil.getRequiredInput("output");
     const threads = util.getThreadsFlag(
-      actionsUtil.getOptionalInput("threads"),
+      actionsUtil.getOptionalInput("threads") || process.env["CODEQL_THREADS"],
       logger
     );
-    const memory = util.getMemoryFlag(actionsUtil.getOptionalInput("ram"));
+    const memory = util.getMemoryFlag(
+      actionsUtil.getOptionalInput("ram") || process.env["CODEQL_RAM"]
+    );
     await runFinalize(outputDir, threads, memory, config, logger);
     if (actionsUtil.getRequiredInput("skip-queries") !== "true") {
       runStats = await runQueries(
@@ -188,9 +190,11 @@ async function run() {
   }
 }
 
+export const runPromise = run();
+
 async function runWrapper() {
   try {
-    await run();
+    await runPromise;
   } catch (error) {
     core.setFailed(`analyze action failed: ${error}`);
     console.log(error);
diff --git a/src/init-action.ts b/src/init-action.ts
index 44402a688..f8e218c71 100644
--- a/src/init-action.ts
+++ b/src/init-action.ts
@@ -32,6 +32,8 @@ import {
   getGitHubVersion,
   codeQlVersionAbove,
   enrichEnvironment,
+  getMemoryFlagValue,
+  getThreadsFlagValue,
 } from "./util";
 
 // eslint-disable-next-line import/no-commonjs
@@ -204,9 +206,20 @@ async function run() {
       );
     }
 
-    // Setup CODEQL_RAM flag (todo improve this https://github.com/github/dsp-code-scanning/issues/935)
-    const codeqlRam = process.env["CODEQL_RAM"] || "6500";
-    core.exportVariable("CODEQL_RAM", codeqlRam);
+    // Limit RAM and threads for extractors. When running extractors, the CodeQL CLI obeys the
+    // CODEQL_RAM and CODEQL_THREADS environment variables to decide how much RAM and how many
+    // threads it would ask extractors to use. See help text for the "--ram" and "--threads"
+    // options at https://codeql.github.com/docs/codeql-cli/manual/database-trace-command/
+    // for details.
+    core.exportVariable(
+      "CODEQL_RAM",
+      process.env["CODEQL_RAM"] ||
+        getMemoryFlagValue(getOptionalInput("ram")).toString()
+    );
+    core.exportVariable(
+      "CODEQL_THREADS",
+      getThreadsFlagValue(getOptionalInput("threads"), logger).toString()
+    );
 
     const sourceRoot = path.resolve(
       getRequiredEnvParam("GITHUB_WORKSPACE"),
diff --git a/src/runner.ts b/src/runner.ts
index 92969f632..f9201b18e 100644
--- a/src/runner.ts
+++ b/src/runner.ts
@@ -25,6 +25,8 @@ import {
   Mode,
   codeQlVersionAbove,
   enrichEnvironment,
+  getMemoryFlagValue,
+  getThreadsFlagValue,
 } from "./util";
 
 // eslint-disable-next-line import/no-commonjs
@@ -53,11 +55,15 @@ function getToolsDir(userInput: string | undefined): string {
 
 const codeqlEnvJsonFilename = "codeql-env.json";
 
+function loadTracerEnvironment(config: Config): { [name: string]: string } {
+  const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename);
+  return JSON.parse(fs.readFileSync(jsonEnvFile).toString("utf-8"));
+}
+
 // Imports the environment from codeqlEnvJsonFilename if not already present
 function importTracerEnvironment(config: Config) {
   if (!("ODASA_TRACER_CONFIGURATION" in process.env)) {
-    const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename);
-    const env = JSON.parse(fs.readFileSync(jsonEnvFile).toString("utf-8"));
+    const env = loadTracerEnvironment(config);
     for (const key of Object.keys(env)) {
       process.env[key] = env[key];
     }
@@ -109,6 +115,8 @@ interface InitArgs {
   githubAuth: string;
   githubAuthStdin: boolean;
   debug: boolean;
+  ram: string | undefined;
+  threads: string | undefined;
 }
 
 program
@@ -167,6 +175,18 @@ program
     "--trace-process-level <number>",
     "(Advanced, windows-only) Inject a windows tracer of this process into a parent process <number> levels up."
   )
+  .option(
+    "--ram <number>",
+    "The amount of memory in MB that can be used by CodeQL extractors. " +
+      "By default, CodeQL extractors will use most of the memory available in the system. " +
+      'This input also sets the amount of memory that can later be used by the "analyze" command.'
+  )
+  .option(
+    "--threads <number>",
+    "The number of threads that can be used by CodeQL extractors. " +
+      "By default, CodeQL extractors will use all the hardware threads available in the system. " +
+      'This input also sets the number of threads that can later be used by the "analyze" command.'
+  )
   .action(async (cmd: InitArgs) => {
     const logger = getRunnerLogger(cmd.debug);
 
@@ -195,6 +215,17 @@ program
       const gitHubVersion = await getGitHubVersion(apiDetails);
       checkGitHubVersionInRange(gitHubVersion, logger, Mode.runner);
 
+      // Limit RAM and threads for extractors. When running extractors, the CodeQL CLI obeys the
+      // CODEQL_RAM and CODEQL_THREADS environment variables to decide how much RAM and how many
+      // threads it would ask extractors to use. See help text for the "--ram" and "--threads"
+      // options at https://codeql.github.com/docs/codeql-cli/manual/database-trace-command/
+      // for details.
+      process.env["CODEQL_RAM"] = getMemoryFlagValue(cmd.ram).toString();
+      process.env["CODEQL_THREADS"] = getThreadsFlagValue(
+        cmd.threads,
+        logger
+      ).toString();
+
       let codeql: CodeQL;
       if (cmd.codeqlPath !== undefined) {
         codeql = await getCodeQL(cmd.codeqlPath);
@@ -402,7 +433,10 @@ program
   )
   .option(
     "--ram <ram>",
-    "Amount of memory to use when running queries. Default is to use all available memory."
+    "The amount of memory in MB that can be used by CodeQL for database finalization and query execution. " +
+      'By default, this command will use the same amount of memory as previously set in the "init" command. ' +
+      'If the "init" command also does not have an explicit "ram" flag, this command will use most of the ' +
+      "memory available in the system."
   )
   .option(
     "--no-add-snippets",
@@ -410,8 +444,10 @@ program
   )
   .option(
     "--threads <threads>",
-    "Number of threads to use when running queries. " +
-      "Default is to use all available cores."
+    "The number of threads that can be used by CodeQL for database finalization and query execution. " +
+      'By default, this command will use the same number of threads as previously set in the "init" command. ' +
+      'If the "init" command also does not have an explicit "threads" flag, this command will use all the ' +
+      "hardware threads available in the system."
   )
   .option(
     "--temp-dir <dir>",
@@ -447,8 +483,17 @@ program
 
       const outputDir =
         cmd.outputDir || path.join(config.tempDir, "codeql-sarif");
-      const threads = getThreadsFlag(cmd.threads, logger);
-      const memory = getMemoryFlag(cmd.ram);
+      let initEnv: { [name: string]: string } = {};
+      try {
+        initEnv = loadTracerEnvironment(config);
+      } catch (err) {
+        // The init command did not generate a tracer environment file
+      }
+      const threads = getThreadsFlag(
+        cmd.threads || initEnv["CODEQL_THREADS"],
+        logger
+      );
+      const memory = getMemoryFlag(cmd.ram || initEnv["CODEQL_RAM"]);
       await runFinalize(outputDir, threads, memory, config, logger);
       await runQueries(
         outputDir,
diff --git a/src/util.ts b/src/util.ts
index 89aadf168..986c32795 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -85,13 +85,13 @@ function getSystemReservedMemoryMegaBytes(): number {
 }
 
 /**
- * Get the codeql `--ram` flag as configured by the `ram` input. If no value was
- * specified, the total available memory will be used minus a threshold
- * reserved for the OS.
+ * Get the value of the codeql `--ram` flag as configured by the `ram` input.
+ * If no value was specified, the total available memory will be used minus a
+ * threshold reserved for the OS.
  *
- * @returns string
+ * @returns {number} the amount of RAM to use, in megabytes
  */
-export function getMemoryFlag(userInput: string | undefined): string {
+export function getMemoryFlagValue(userInput: string | undefined): number {
   let memoryToUseMegaBytes: number;
   if (userInput) {
     memoryToUseMegaBytes = Number(userInput);
@@ -104,7 +104,18 @@ export function getMemoryFlag(userInput: string | undefined): string {
     const reservedMemoryMegaBytes = getSystemReservedMemoryMegaBytes();
     memoryToUseMegaBytes = totalMemoryMegaBytes - reservedMemoryMegaBytes;
   }
-  return `--ram=${Math.floor(memoryToUseMegaBytes)}`;
+  return Math.floor(memoryToUseMegaBytes);
+}
+
+/**
+ * Get the codeql `--ram` flag as configured by the `ram` input. If no value was
+ * specified, the total available memory will be used minus a threshold
+ * reserved for the OS.
+ *
+ * @returns string
+ */
+export function getMemoryFlag(userInput: string | undefined): string {
+  return `--ram=${getMemoryFlagValue(userInput)}`;
 }
 
 /**
@@ -123,17 +134,17 @@ export function getAddSnippetsFlag(
 }
 
 /**
- * Get the codeql `--threads` value specified for the `threads` input.
- * If no value was specified, all available threads will be used.
+ * Get the value of the codeql `--threads` flag specified for the `threads`
+ * input. If no value was specified, all available threads will be used.
  *
  * The value will be capped to the number of available CPUs.
  *
- * @returns string
+ * @returns {number}
  */
-export function getThreadsFlag(
+export function getThreadsFlagValue(
   userInput: string | undefined,
   logger: Logger
-): string {
+): number {
   let numThreads: number;
   const maxThreads = os.cpus().length;
   if (userInput) {
@@ -158,7 +169,22 @@ export function getThreadsFlag(
     // Default to using all threads
     numThreads = maxThreads;
   }
-  return `--threads=${numThreads}`;
+  return numThreads;
+}
+
+/**
+ * Get the codeql `--threads` flag specified for the `threads` input.
+ * If no value was specified, all available threads will be used.
+ *
+ * The value will be capped to the number of available CPUs.
+ *
+ * @returns string
+ */
+export function getThreadsFlag(
+  userInput: string | undefined,
+  logger: Logger
+): string {
+  return `--threads=${getThreadsFlagValue(userInput, logger)}`;
 }
 
 /**