ltex-plus / vscode-ltex-plus

LTeX+: Grammar/spell checker :mag::heavy_check_mark: for VS Code using LanguageTool with support for LaTeX :mortar_board:, Markdown :pencil:, and others
https://marketplace.visualstudio.com/items?itemName=ltex-plus.vscode-ltex-plus
Mozilla Public License 2.0
29 stars 0 forks source link

High CPU usage #55

Open Nerixyz opened 3 days ago

Nerixyz commented 3 days ago

Describe the bug

Upon opening a project with a long markdown file, the language server sits at about 60% CPU (with 600 MiB RAM) - this wasn't the case in earlier versions (i.e. before 15.0).

Steps to reproduce

  1. Create a markdown file
  2. Paste https://github.com/Chatterino/chatterino2/blob/master/CHANGELOG.md?plain=1 and wait for LTeX to start checking

Expected behavior

The document is checked (this may take some time, but not several minutes and shouldn't consume 60% CPU).

Sample document

(see above)

LTeX+ configuration

Default config.

"LTeX+ Language Server" log file

``` [Info - 1:11:16 PM] Starting ltex-ls... Sept. 29, 2024 1:11:32 PM org.bsplines.ltexls.server.LtexLanguageServer initialize INFO: ltex-ls 18.1.0 - initializing... Sept. 29, 2024 1:11:32 PM org.bsplines.ltexls.tools.I18n setLocale INFO: Setting locale to 'en' Sept. 29, 2024 1:11:32 PM org.bsplines.ltexls.server.LtexTextDocumentItem raiseExceptionIfCanceled FINE: Canceling check due to incoming check request... Sept. 29, 2024 1:11:33 PM org.bsplines.ltexls.server.DocumentChecker logTextToBeChecked FINE: Checking the following text in language 'en-US' via LanguageTool: "" Sept. 29, 2024 1:11:33 PM org.bsplines.ltexls.server.DocumentChecker checkAnnotatedTextFragment FINE: Obtained 0 rule matches Sept. 29, 2024 1:12:12 PM org.bsplines.ltexls.server.DocumentChecker logTextToBeChecked FINE: Checking the following text in language 'en-US' via LanguageTool: "Changelog\n\nUnversioned\n\nMajor: Add option to show pronouns in user card. (#5442, #5583)\nMajor: Relea"... (truncated to 100 characters) ```

"LTeX+ Language Client" log file

``` 2024-09-29T11:17:33.201Z Info: Setting LTeX UI language to 'en-us'. 2024-09-29T11:17:33.201Z Info: Loading i18n messages... 2024-09-29T11:17:33.203Z Info: Loading default i18n messages... 2024-09-29T11:17:33.208Z Info: 2024-09-29T11:17:33.209Z Info: ltex.ltex-ls.path not set. 2024-09-29T11:17:33.209Z Info: Searching for ltex-ls in 'c:\Users\Johannes\.vscode\extensions\ltex-plus.vscode-ltex-plus-15.0.0\lib'... 2024-09-29T11:17:33.210Z Info: ltex-ls found in 'c:\Users\Johannes\.vscode\extensions\ltex-plus.vscode-ltex-plus-15.0.0\lib\ltex-ls-plus-18.1.0'. 2024-09-29T11:17:33.210Z Info: 2024-09-29T11:17:33.210Z Info: Using ltex-ls from 'c:\Users\Johannes\.vscode\extensions\ltex-plus.vscode-ltex-plus-15.0.0\lib\ltex-ls-plus-18.1.0'. 2024-09-29T11:17:33.211Z Info: Using Java bundled with ltex-ls as ltex.java.path is not set. 2024-09-29T11:17:33.215Z Info: Testing ltex-ls... 2024-09-29T11:17:33.215Z Info: Command: "\"c:\\Users\\Johannes\\.vscode\\extensions\\ltex-plus.vscode-ltex-plus-15.0.0\\lib\\ltex-ls-plus-18.1.0\\bin\\ltex-ls-plus.bat\"" 2024-09-29T11:17:33.215Z Info: Arguments: ["--version"] 2024-09-29T11:17:33.215Z Info: env['JAVA_HOME']: undefined 2024-09-29T11:17:33.215Z Info: env['JAVA_OPTS']: "-Xms64m -Xmx512m" 2024-09-29T11:17:35.709Z Info: Test successful! 2024-09-29T11:17:35.710Z Info: 2024-09-29T11:17:35.716Z Info: Starting ltex-ls... 2024-09-29T11:17:35.716Z Info: Command: "\"c:\\Users\\Johannes\\.vscode\\extensions\\ltex-plus.vscode-ltex-plus-15.0.0\\lib\\ltex-ls-plus-18.1.0\\bin\\ltex-ls-plus.bat\"" 2024-09-29T11:17:35.716Z Info: Arguments: [] 2024-09-29T11:17:35.716Z Info: env['JAVA_HOME']: undefined 2024-09-29T11:17:35.716Z Info: env['JAVA_OPTS']: "-Xms64m -Xmx512m" 2024-09-29T11:17:35.716Z Info: [Trace - 1:17:35 PM] Sending request 'initialize - (0)'. Params: { "processId": 3592, "clientInfo": { "name": "Visual Studio Code", "version": "1.93.1" }, "locale": "en", "rootPath": null, "rootUri": null, "capabilities": { "workspace": { "applyEdit": true, "workspaceEdit": { "documentChanges": true, "resourceOperations": [ "create", "rename", "delete" ], "failureHandling": "textOnlyTransactional", "normalizesLineEndings": true, "changeAnnotationSupport": { "groupsOnLabel": true } }, "configuration": true, "didChangeWatchedFiles": { "dynamicRegistration": true, "relativePatternSupport": true }, "symbol": { "dynamicRegistration": true, "symbolKind": { "valueSet": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 ] }, "tagSupport": { "valueSet": [ 1 ] }, "resolveSupport": { "properties": [ "location.range" ] } }, "codeLens": { "refreshSupport": true }, "executeCommand": { "dynamicRegistration": true }, "didChangeConfiguration": { "dynamicRegistration": true }, "workspaceFolders": true, "foldingRange": { "refreshSupport": true }, "semanticTokens": { "refreshSupport": true }, "fileOperations": { "dynamicRegistration": true, "didCreate": true, "didRename": true, "didDelete": true, "willCreate": true, "willRename": true, "willDelete": true }, "inlineValue": { "refreshSupport": true }, "inlayHint": { "refreshSupport": true }, "diagnostics": { "refreshSupport": true } }, "textDocument": { "publishDiagnostics": { "relatedInformation": true, "versionSupport": false, "tagSupport": { "valueSet": [ 1, 2 ] }, "codeDescriptionSupport": true, "dataSupport": true }, "synchronization": { "dynamicRegistration": true, "willSave": true, "willSaveWaitUntil": true, "didSave": true }, "completion": { "dynamicRegistration": true, "contextSupport": true, "completionItem": { "snippetSupport": true, "commitCharactersSupport": true, "documentationFormat": [ "markdown", "plaintext" ], "deprecatedSupport": true, "preselectSupport": true, "tagSupport": { "valueSet": [ 1 ] }, "insertReplaceSupport": true, "resolveSupport": { "properties": [ "documentation", "detail", "additionalTextEdits" ] }, "insertTextModeSupport": { "valueSet": [ 1, 2 ] }, "labelDetailsSupport": true }, "insertTextMode": 2, "completionItemKind": { "valueSet": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ] }, "completionList": { "itemDefaults": [ "commitCharacters", "editRange", "insertTextFormat", "insertTextMode", "data" ] } }, "hover": { "dynamicRegistration": true, "contentFormat": [ "markdown", "plaintext" ] }, "signatureHelp": { "dynamicRegistration": true, "signatureInformation": { "documentationFormat": [ "markdown", "plaintext" ], "parameterInformation": { "labelOffsetSupport": true }, "activeParameterSupport": true }, "contextSupport": true }, "definition": { "dynamicRegistration": true, "linkSupport": true }, "references": { "dynamicRegistration": true }, "documentHighlight": { "dynamicRegistration": true }, "documentSymbol": { "dynamicRegistration": true, "symbolKind": { "valueSet": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 ] }, "hierarchicalDocumentSymbolSupport": true, "tagSupport": { "valueSet": [ 1 ] }, "labelSupport": true }, "codeAction": { "dynamicRegistration": true, "isPreferredSupport": true, "disabledSupport": true, "dataSupport": true, "resolveSupport": { "properties": [ "edit" ] }, "codeActionLiteralSupport": { "codeActionKind": { "valueSet": [ "", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports" ] } }, "honorsChangeAnnotations": true }, "codeLens": { "dynamicRegistration": true }, "formatting": { "dynamicRegistration": true }, "rangeFormatting": { "dynamicRegistration": true, "rangesSupport": true }, "onTypeFormatting": { "dynamicRegistration": true }, "rename": { "dynamicRegistration": true, "prepareSupport": true, "prepareSupportDefaultBehavior": 1, "honorsChangeAnnotations": true }, "documentLink": { "dynamicRegistration": true, "tooltipSupport": true }, "typeDefinition": { "dynamicRegistration": true, "linkSupport": true }, "implementation": { "dynamicRegistration": true, "linkSupport": true }, "colorProvider": { "dynamicRegistration": true }, "foldingRange": { "dynamicRegistration": true, "rangeLimit": 5000, "lineFoldingOnly": true, "foldingRangeKind": { "valueSet": [ "comment", "imports", "region" ] }, "foldingRange": { "collapsedText": false } }, "declaration": { "dynamicRegistration": true, "linkSupport": true }, "selectionRange": { "dynamicRegistration": true }, "callHierarchy": { "dynamicRegistration": true }, "semanticTokens": { "dynamicRegistration": true, "tokenTypes": [ "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "decorator" ], "tokenModifiers": [ "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary" ], "formats": [ "relative" ], "requests": { "range": true, "full": { "delta": true } }, "multilineTokenSupport": false, "overlappingTokenSupport": false, "serverCancelSupport": true, "augmentsSyntaxTokens": true }, "linkedEditingRange": { "dynamicRegistration": true }, "typeHierarchy": { "dynamicRegistration": true }, "inlineValue": { "dynamicRegistration": true }, "inlayHint": { "dynamicRegistration": true, "resolveSupport": { "properties": [ "tooltip", "textEdits", "label.tooltip", "label.location", "label.command" ] } }, "diagnostic": { "dynamicRegistration": true, "relatedDocumentSupport": false } }, "window": { "showMessage": { "messageActionItem": { "additionalPropertiesSupport": true } }, "showDocument": { "support": true }, "workDoneProgress": true }, "general": { "staleRequestSupport": { "cancel": true, "retryOnContentModified": [ "textDocument/semanticTokens/full", "textDocument/semanticTokens/range", "textDocument/semanticTokens/full/delta" ] }, "regularExpressions": { "engine": "ECMAScript", "version": "ES2020" }, "markdown": { "parser": "marked", "version": "1.1.0" }, "positionEncodings": [ "utf-16" ] }, "notebookDocument": { "synchronization": { "dynamicRegistration": true, "executionSummarySupport": true } } }, "initializationOptions": { "customCapabilities": { "workspaceSpecificConfiguration": true } }, "trace": "verbose", "workspaceFolders": null } [Trace - 1:17:49 PM] Received response 'initialize - (0)' in 13580ms. Result: { "capabilities": { "textDocumentSync": 1, "completionProvider": {}, "codeActionProvider": { "codeActionKinds": [ "quickfix.ltex.acceptSuggestions" ] }, "executeCommandProvider": { "commands": [ "_ltex.checkDocument", "_ltex.getServerStatus" ] } } } [Trace - 1:17:49 PM] Sending notification 'initialized'. Params: {} [Trace - 1:17:49 PM] Sending notification 'textDocument/didOpen'. Params: { "textDocument": { "uri": "untitled:Untitled-1", "languageId": "markdown", "version": 2, "text": } } [Trace - 1:17:49 PM] Sending notification 'workspace/didChangeConfiguration'. Params: { "settings": { "ltex": { "enabled": [ "bibtex", "context", "context.tex", "html", "latex", "markdown", "org", "restructuredtext", "rsweave" ], "language": "en-US", "dictionary": {}, "disabledRules": {}, "enabledRules": {}, "hiddenFalsePositives": {}, "bibtex": { "fields": {} }, "latex": { "commands": {}, "environments": {} }, "markdown": { "nodes": {} }, "configurationTarget": { "dictionary": "workspaceFolderExternalFile", "disabledRules": "workspaceFolderExternalFile", "hiddenFalsePositives": "workspaceFolderExternalFile" }, "additionalRules": { "enablePickyRules": false, "motherTongue": "", "languageModel": "", "neuralNetworkModel": "", "word2VecModel": "" }, "languageToolHttpServerUri": "", "languageToolOrg": { "username": "", "apiKey": "" }, "ltex-ls": { "path": "", "logLevel": "fine", "languageToolHttpServerUri": "", "languageToolOrgUsername": "", "languageToolOrgApiKey": "" }, "java": { "path": "", "initialHeapSize": 64, "maximumHeapSize": 512 }, "sentenceCacheSize": 2000, "completionEnabled": false, "diagnosticSeverity": "information", "checkFrequency": "edit", "clearDiagnosticsWhenClosingFile": true, "statusBarItem": false, "trace": { "server": "verbose" } } } } [Trace - 1:17:49 PM] Sending request 'textDocument/codeAction - (1)'. Params: { "textDocument": { "uri": "untitled:Untitled-1" }, "range": { "start": { "line": 1026, "character": 165 }, "end": { "line": 1026, "character": 165 } }, "context": { "diagnostics": [ { "range": { "start": { "line": 1026, "character": 164 }, "end": { "line": 1026, "character": 165 } }, "message": "MD047/single-trailing-newline: Files should end with a single newline character", "code": "MD047", "codeDescription": { "href": "https://github.com/DavidAnson/markdownlint/blob/v0.35.0/doc/md047.md" }, "severity": 2, "source": "markdownlint" } ], "triggerKind": 2 } } [Trace - 1:17:49 PM] Received request 'window/workDoneProgress/create - (1)'. Params: { "token": "{\"uri\":\"untitled:Untitled-1\",\"operation\":\"checkDocument\",\"uuid\":\"1f0ad23a-997a-6641-a057-e0f743693fc2\"}" } [Trace - 1:17:49 PM] Sending response 'window/workDoneProgress/create - (1)'. Processing request took 1ms No result returned. [Trace - 1:17:49 PM] Received notification '$/progress'. Params: { "token": "{\"uri\":\"untitled:Untitled-1\",\"operation\":\"checkDocument\",\"uuid\":\"1f0ad23a-997a-6641-a057-e0f743693fc2\"}", "value": { "kind": "end" } } [Trace - 1:17:49 PM] Received request 'window/workDoneProgress/create - (2)'. Params: { "token": "{\"uri\":\"untitled:Untitled-1\",\"operation\":\"checkDocument\",\"uuid\":\"7d4c53a2-6d27-8848-18f8-d092632a0de4\"}" } [Trace - 1:17:49 PM] Sending response 'window/workDoneProgress/create - (2)'. Processing request took 0ms No result returned. [Trace - 1:17:49 PM] Received notification '$/progress'. Params: { "token": "{\"uri\":\"untitled:Untitled-1\",\"operation\":\"checkDocument\",\"uuid\":\"7d4c53a2-6d27-8848-18f8-d092632a0de4\"}", "value": { "kind": "begin", "title": "Checking document", "cancellable": false, "message": "untitled:Untitled-1" } } [Trace - 1:17:49 PM] Received request 'workspace/configuration - (3)'. Params: { "items": [ { "scopeUri": "untitled:Untitled-1", "section": "ltex" } ] } [Trace - 1:17:49 PM] Sending response 'workspace/configuration - (3)'. Processing request took 1ms Result: [ { "enabled": [ "bibtex", "context", "context.tex", "html", "latex", "markdown", "org", "restructuredtext", "rsweave" ], "language": "en-US", "dictionary": {}, "disabledRules": {}, "enabledRules": {}, "hiddenFalsePositives": {}, "bibtex": { "fields": {} }, "latex": { "commands": {}, "environments": {} }, "markdown": { "nodes": {} }, "configurationTarget": { "dictionary": "workspaceFolderExternalFile", "disabledRules": "workspaceFolderExternalFile", "hiddenFalsePositives": "workspaceFolderExternalFile" }, "additionalRules": { "enablePickyRules": false, "motherTongue": "", "languageModel": "", "neuralNetworkModel": "", "word2VecModel": "" }, "languageToolHttpServerUri": "", "languageToolOrg": { "username": "", "apiKey": "" }, "ltex-ls": { "path": "", "logLevel": "fine", "languageToolHttpServerUri": "", "languageToolOrgUsername": "", "languageToolOrgApiKey": "" }, "java": { "path": "", "initialHeapSize": 64, "maximumHeapSize": 512 }, "sentenceCacheSize": 2000, "completionEnabled": false, "diagnosticSeverity": "information", "checkFrequency": "edit", "clearDiagnosticsWhenClosingFile": true, "statusBarItem": false, "trace": { "server": "verbose" } } ] [Trace - 1:17:49 PM] Received request 'ltex/workspaceSpecificConfiguration - (4)'. Params: { "items": [ { "scopeUri": "untitled:Untitled-1", "section": "ltex" } ] } [Trace - 1:17:49 PM] Sending response 'ltex/workspaceSpecificConfiguration - (4)'. Processing request took 186ms Result: [ { "dictionary": { "auto": [], "ar": [], "ast-ES": [], "be-BY": [], "br-FR": [], "ca-ES": [], "ca-ES-valencia": [], "da-DK": [], "de": [], "de-AT": [], "de-CH": [], "de-DE": [], "de-DE-x-simple-language": [], "el-GR": [], "en": [], "en-AU": [], "en-CA": [], "en-GB": [], "en-NZ": [], "en-US": [], "en-ZA": [], "eo": [], "es": [], "es-AR": [], "fa": [], "fr": [], "ga-IE": [], "gl-ES": [], "it": [], "ja-JP": [], "km-KH": [], "nl": [], "nl-BE": [], "pl-PL": [], "pt": [], "pt-AO": [], "pt-BR": [], "pt-MZ": [], "pt-PT": [], "ro-RO": [], "ru-RU": [], "sk-SK": [], "sl-SI": [], "sv": [], "ta-IN": [], "tl-PH": [], "uk-UA": [], "zh-CN": [] }, "disabledRules": { "auto": [], "ar": [], "ast-ES": [], "be-BY": [], "br-FR": [], "ca-ES": [], "ca-ES-valencia": [], "da-DK": [], "de": [], "de-AT": [], "de-CH": [], "de-DE": [], "de-DE-x-simple-language": [], "el-GR": [], "en": [], "en-AU": [], "en-CA": [], "en-GB": [], "en-NZ": [], "en-US": [], "en-ZA": [], "eo": [], "es": [], "es-AR": [], "fa": [], "fr": [], "ga-IE": [], "gl-ES": [], "it": [], "ja-JP": [], "km-KH": [], "nl": [], "nl-BE": [], "pl-PL": [], "pt": [], "pt-AO": [], "pt-BR": [], "pt-MZ": [], "pt-PT": [], "ro-RO": [], "ru-RU": [], "sk-SK": [], "sl-SI": [], "sv": [], "ta-IN": [], "tl-PH": [], "uk-UA": [], "zh-CN": [] }, "enabledRules": { "auto": [], "ar": [], "ast-ES": [], "be-BY": [], "br-FR": [], "ca-ES": [], "ca-ES-valencia": [], "da-DK": [], "de": [], "de-AT": [], "de-CH": [], "de-DE": [], "de-DE-x-simple-language": [], "el-GR": [], "en": [], "en-AU": [], "en-CA": [], "en-GB": [], "en-NZ": [], "en-US": [], "en-ZA": [], "eo": [], "es": [], "es-AR": [], "fa": [], "fr": [], "ga-IE": [], "gl-ES": [], "it": [], "ja-JP": [], "km-KH": [], "nl": [], "nl-BE": [], "pl-PL": [], "pt": [], "pt-AO": [], "pt-BR": [], "pt-MZ": [], "pt-PT": [], "ro-RO": [], "ru-RU": [], "sk-SK": [], "sl-SI": [], "sv": [], "ta-IN": [], "tl-PH": [], "uk-UA": [], "zh-CN": [] }, "hiddenFalsePositives": { "auto": [], "ar": [], "ast-ES": [], "be-BY": [], "br-FR": [], "ca-ES": [], "ca-ES-valencia": [], "da-DK": [], "de": [], "de-AT": [], "de-CH": [], "de-DE": [], "de-DE-x-simple-language": [], "el-GR": [], "en": [], "en-AU": [], "en-CA": [], "en-GB": [], "en-NZ": [], "en-US": [], "en-ZA": [], "eo": [], "es": [], "es-AR": [], "fa": [], "fr": [], "ga-IE": [], "gl-ES": [], "it": [], "ja-JP": [], "km-KH": [], "nl": [], "nl-BE": [], "pl-PL": [], "pt": [], "pt-AO": [], "pt-BR": [], "pt-MZ": [], "pt-PT": [], "ro-RO": [], "ru-RU": [], "sk-SK": [], "sl-SI": [], "sv": [], "ta-IN": [], "tl-PH": [], "uk-UA": [], "zh-CN": [] } } ] [Trace - 1:18:17 PM] Sending notification '$/cancelRequest'. Params: { "id": 1 } [Trace - 1:18:17 PM] Sending request 'textDocument/codeAction - (2)'. Params: { "textDocument": { "uri": "untitled:Untitled-1" }, "range": { "start": { "line": 1000, "character": 57 }, "end": { "line": 1000, "character": 57 } }, "context": { "diagnostics": [], "triggerKind": 2 } } [Trace - 1:18:17 PM] Received response 'textDocument/codeAction - (1)' in 28426ms. Request failed: The request (id: 1, method: 'textDocument/codeAction') has been cancelled (-32800). [Trace - 1:18:17 PM] Received response 'textDocument/codeAction - (2)' in 17ms. Result: [] [Trace - 1:18:19 PM] Sending request 'textDocument/codeAction - (3)'. Params: { "textDocument": { "uri": "untitled:Untitled-1" }, "range": { "start": { "line": 1023, "character": 78 }, "end": { "line": 1023, "character": 78 } }, "context": { "diagnostics": [], "triggerKind": 2 } } [Trace - 1:18:19 PM] Received response 'textDocument/codeAction - (3)' in 3ms. Result: [] ```

Version information List here the version information of the relevant software.

spitzerd commented 3 days ago

Confirmed. Thank you for opening the issue. I will publish vscode-ltex-plus 15.0.1 with ltex-ls-plus 17.01

spitzerd commented 3 days ago

15.0.1. was published in the VS Code marketplace a few minutes ago. I will check in to upcoming days what is wrong with LTeX+ LS 18.1.0

spitzerd commented 1 day ago

I guess I found the issue. LTeX+ LS 18.1 requires more memory and the default maximum memory is 512 megabytes, which is quite low. Most computers these days have 8 gigabytes memory or more, so setting the maximum to 2 gigabytes sounds reasonable for me.

Before I publish the next version with LTeX+ LS 18.1, I want to be sure that the memory limit is the actual reason. @Nerixyz Can you do a short test, please? Of course, everyone else who is reading this issue is invited to test and give a feedback.

  1. Install version 15.0.0 again by clicking on "Install Specific Version" image

  2. Set the setting "ltex.java.maximumHeapSize" to 2048 image

  3. Restart VS Code

  4. Check if everything is working

The memory consumption of the Java process on my desktop computer and laptop is between 900 MB and 1300 MB, depending on the size of the text and the amount of files. With "ltex.java.maximumHeapSize" set to 2048, it's working for both my desktop computer with 64 GB of memory (Windows 10) and my laptop with 8 GB of memory (Windows 11).

Nerixyz commented 12 hours ago

@Nerixyz Can you do a short test, please?

I can confirm this works with more memory. It's sitting at about 900 MiB for me.

Most computers these days have 8 gigabytes memory or more, so setting the maximum to 2 gigabytes sounds reasonable for me.

On my Laptop with 8 GiB RAM, this is hitting the limits. I'm using clangd, which is memory hungry too (often at around 4 GiB), but I'd consider it an existential extension (i.e. something I can't live without). It's not really an issue with this extension, but more of an issue with LanguageTool, I'd guess.

NK-tjw commented 7 hours ago

I found the extension cannot doing spelling check now.