High CPU consumption in my user micro service

Hello, I have a micro service that its job is manage my users, this micro service when is running and even without managing many user, or 0 user , it spends 20% cpu in developer mode, It is interesting to know, I have no error which makes me understand!! For this purpose I have no options to test my project.

How can I find this problem and fix this ?

erlang v: 20.3.1
elixir v: 1.6.4
phoenix v: 1.3.3
node v: 9.3.0
other container Redis v: 4.0.11
other container Postgresql v: 10.5

my lib in elixir project:

  defp deps do
    [
      {:postgrex, ">= 0.0.0"},
      {:ecto, "~> 2.1"},
      {:guardian, "~> 1.0"},
      {:jose, "~> 1.8"},
      {:httpoison, "~> 1.0"},
      {:plug, "~> 1.4"},
      {:comeonin, "~> 4.0"},
      {:bcrypt_elixir, "~> 1.0"},
      {:redix, "~> 0.7.0"},
      {:phoenix, "~> 1.3.0"},
      {:exq, "~> 0.10.1"},
      {:bamboo, "~> 1.1"},
      {:timex, "~> 3.4"},
      {:bamboo_smtp, "~> 1.6.0"}
    ]
  end

in phoenix project :

[
      {:phoenix, "~> 1.3.0"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      {:gettext, "~> 0.11"},
      {:trangell_users_service, in_umbrella: true},
      {:cowboy, "~> 1.0"},
      {:plug_cowboy, "~> 1.0"}
    ]

I am using Docker, and my project is Json base and doesn’t have Html render.

You probably need to show some code.

Just by the dependencies you use its hard to tell.

Anyway, you should be able to use :observer or :etop to find out which processes use up your precious CPU.

1 Like

Thanks, how can I load those in server, not graphical desktop, because my code has the problem in my server.

iex(2)> :observer
:observer
iex(3)> :etop
:etop

I don’t know which my code or module has the problem that I show it here :((

You are running :dev env on your server?


:etop and :observer are both part of the :observer application. If you have it installed on your system a simple :observer.start() or :etop.start() should be enough.

Just remote shell into your server and use them, that usually works. This means not SSH into server and then run iex, but to use iex --name ... --cookie ... --remsh server@node to connect.

2 Likes

yes I was going to move it to production mode , but I saw the problem called,

Unfortunately, I didn’t understand how I can load in my server, would you mind giving me an example or explaining more?

[error] ERROR: Could not find 'wxe_driver.so' in: /usr/local/lib/erlang/lib/wx-1.8.3/priv

{:error,
 {{:load_driver, 'No driver found'},
  [
    {:wxe_server, :start, 1, [file: 'wxe_server.erl', line: 65]},
    {:wx, :new, 1, [file: 'wx.erl', line: 115]},
    {:observer_wx, :init, 1, [file: 'observer_wx.erl', line: 98]},
    {:wx_object, :init_it, 6, [file: 'wx_object.erl', line: 372]},
    {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 247]}
  ]}}

For :observer you need to have wx-widgets installed. I never used it in a remote shell myself, but people told me it usually works. I can’t help you with that one.

Have you been able to figure something out using :etop?

1 Like

because I was forced to load my project with iex -S mix phx.server, I restarted my container. it will take 24 hours to come 20% , I’ll update this post soon.

but now:

For note, dev mode will use more power than prod mode because it actively recompiles and scans and all sorts of things like that.

Your etop listing is showing nothing is using cpu at that moment though.

2 Likes