LT-TernJS icon indicating copy to clipboard operation
LT-TernJS copied to clipboard

ternserver.js gets stuck at 100% cpu on one core

Open hamoid opened this issue 9 years ago • 9 comments

I'm not sure if I should report this here or at tern.js. While using LightTable, sometimes I notice the fans are blowing full speed non stop. When looking at the task manager, I see that a node process that runs ternserver.js is using one of the CPU cores at 100%. If I close LightTable and start it again, I may and with several instances of this process, each using one core.

In the editor sometimes I notice that autocomplete acts weird. The suggestions close immediately without having time to choose one, or existing variables are not suggested. After 5 or 10 seconds it starts working again.

I posted a screenshot and a comment about it in the LT issues.

Is there anything I can do to help find why this is happening?

hamoid avatar Nov 29 '14 09:11 hamoid

The CPU issue I've seen before with tern it's self. It seems like some codebases will cause the analyzer to be caught in an infinite loop, but I haven't been able to relieabley replicate the problem.

I have also seen the glitchy UI issues and they are likely on Light Table's end, but I also have not been able to reliably reproduce the issue.

Thank you for filing this bug! However, I don't have much time to invest in tracking down issues in other projects. If you have some steps for consistently reproducing the problem, it would help me tremendously.

mortalapeman avatar Nov 30 '14 03:11 mortalapeman

Thanks for your reply. To reproduce the error in my system:

  1. Open LT, create a new file, save it as blabla.js
  2. Type "cons"
  3. LT shows the autocomplete suggestions and I press enter to accept the first one. Now ternjs is stuck and I have to kill it.

As soon as I typed the first letter in the empty js file ("c") in point 2, below I read 'connected to tern server' and I see this error in the console several times:

TypeError: Cannot read property 'completion' of undefined
    at eval (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:31759:44)
    at b (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:6435:45)
    at eval (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:7913:33)
    at cljs.core.LazySeq.sval (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:5561:40)
    at cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:5571:8)
    at cljs.core._seq (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:2311:14)
    at cljs.core.seq (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:2824:27)
    at eval (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:7899:27)
    at cljs.core.LazySeq.sval (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:5561:40)
    at cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:5571:8)
    at cljs.core._seq (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:2311:14)
    at cljs.core.seq (file:///home/npro/Desktop/LightTable/core/node_modules/lighttable/bootstrap.js:2824:27)

Any clues? Thanks!

hamoid avatar Dec 01 '14 22:12 hamoid

Interesting. That is usually one of the first things I type out when testing the plugin. What Light Table version and OS are you running?

Also, post your tern specific behaviors you in your user and workspace if you've changed any of the defaults.

mortalapeman avatar Dec 02 '14 02:12 mortalapeman

I've got LT 0.7.2, binary version 0.8.4. I'm on Ubuntu 14.04, Fish shell, using i3wm instead of Unity. Workspace behaviors is empty. User behaviors:

[:app :lt.objs.style/set-skin "dark"]
[:app :lt.objs.settings/pair-keymap-diffs]

[:editor :lt.objs.editor/no-wrap]
[:editor :lt.objs.style/font-settings "" "13" ""]
[:editor :lt.objs.style/set-theme "base16-dark"]

[:editor.clojure :lt.objs.langs.clj/print-length 1000]

;; Try to disable menu in i3wm
[:app :-lt.objs.menu/create-menu]
[:app :-lt.objs.menu/set-menu]
[:window :-lt.objs.menu/set-menu]

;; Show git changes
[:modific [(:lt.plugins.modific.util/settings
           {:git {:dir ".git" :bin "git" :diff.options ["--no-color" "--no-ext-diff"]}
            :max.file.length 1000 ; lines
            :gutter-width 2})]]

hamoid avatar Dec 02 '14 11:12 hamoid

Excellent! I'll get to testing sometime this week. Thanks for the feedback, I'll see if I can get this problem resolved. On Dec 2, 2014 5:19 AM, "Abe Pazos" [email protected] wrote:

I've got LT 0.7.2, binary version 0.8.4.

I'm on Ubuntu 14.04, Fish shell, using i3wm instead of Unity.

Workspace behaviors is empty.

User behaviors:

''' [:app :lt.objs.style/set-skin "dark"] [:app :lt.objs.settings/pair-keymap-diffs]

[:editor :lt.objs.editor/no-wrap] [:editor :lt.objs.style/font-settings "" "13" ""] [:editor :lt.objs.style/set-theme "base16-dark"]

[:editor.clojure :lt.objs.langs.clj/print-length 1000]

;; Try to disable menu in i3wm [:app :-lt.objs.menu/create-menu] [:app :-lt.objs.menu/set-menu] [:window :-lt.objs.menu/set-menu]

;; Show git changes [:modific [(:lt.plugins.modific.util/settings {:git {:dir ".git" :bin "git" :diff.options ["--no-color" "--no-ext-diff"]} :max.file.length 1000 ; lines :gutter-width 2})]] '''

— Reply to this email directly or view it on GitHub https://github.com/mortalapeman/LT-TernJS/issues/18#issuecomment-65216023 .

mortalapeman avatar Dec 02 '14 17:12 mortalapeman

I forgot: 32bit. I tried installing it again, but same behavior on fresh LT. The configuration folder is not fresh though...

hamoid avatar Dec 03 '14 14:12 hamoid

Sorry it's taken me a while to get back to you with feedback. Life has been pretty hectic lately.

The good news is that I can reproduce the console error you provided. I remember tracking down the source of that error, but I don't remember what the resolution was. In any case, it doesn't appear to interfere with the plugin's ability to provide JavaScript auto completion.

The bad news is, I have followed the steps you provided and could not reproduve the issue. I ran top to see if node starting eating up my CPU but everything appears to be functioning normally.

I use the same version of node to run the Tern process that Light Table uses and you don't appear to have changed any of the default behaviors regarding tern in your project. Maybe there is a workspace you have currently loaded that contains JS files which cause tern to go into an infinite loop. Try adding {:+ {:tern.config [:lt.plugins.tern/lazy-loading]}} to your user behaviors file. That should keep the plugin from trying to eagerly load any JavaScript files in your work space.

mortalapeman avatar Dec 26 '14 20:12 mortalapeman

Thank you for taking a look at it.

Is your suggested change to user behaviors using the new configuration format? I ask because in my file I only see square brackets, not curly braces, and I'm not so familiar with the syntax :)

Happy new year!

hamoid avatar Jan 01 '15 14:01 hamoid

Oh man, I probably need to update all my plugins and README files to use the new flat syntax. It looks like you would just add [:tern.config :lt.plugins.tern/lazy-loading] to the main vector.

mortalapeman avatar Jan 07 '15 18:01 mortalapeman