<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pm2 &#8211; matthias.guru</title>
	<atom:link href="https://matthias.guru/tag/pm2/feed/" rel="self" type="application/rss+xml" />
	<link>https://matthias.guru</link>
	<description>Tipps und Tricks rund um Serveradministration, Werbeeinnahmen und allem was mit meiner IT Selbstständigkeit zu tun hat</description>
	<lastBuildDate>Thu, 20 Oct 2016 09:33:20 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.3</generator>
	<item>
		<title>Prozess Manager für NodeJS</title>
		<link>https://matthias.guru/2016/10/20/prozess-manager-fuer-nodejs/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=prozess-manager-fuer-nodejs</link>
					<comments>https://matthias.guru/2016/10/20/prozess-manager-fuer-nodejs/#respond</comments>
		
		<dc:creator><![CDATA[Matthias]]></dc:creator>
		<pubDate>Thu, 20 Oct 2016 09:33:20 +0000</pubDate>
				<category><![CDATA[nodejs]]></category>
		<category><![CDATA[pm]]></category>
		<category><![CDATA[pm2]]></category>
		<category><![CDATA[process manager]]></category>
		<guid isPermaLink="false">https://hilfreiche-server.tips/?p=5</guid>

					<description><![CDATA[Wie lässt man am besten eine NodeJS App auf einem Server laufen? Lange Zeit nutzte ich dafür einfach den &#8222;screen&#8220; Befehl, welcher überhaupt keine Prozessüberwachung oder ähnliches hatte. Der nächste Versuch war &#8222;forever&#8220;, was nun <a class="mh-excerpt-more" href="https://matthias.guru/2016/10/20/prozess-manager-fuer-nodejs/" title="Prozess Manager für NodeJS">[...]</a>]]></description>
										<content:encoded><![CDATA[<p>Wie lässt man am besten eine NodeJS App auf einem Server laufen? Lange Zeit nutzte ich dafür einfach den &#8222;screen&#8220; Befehl, welcher überhaupt keine Prozessüberwachung oder ähnliches hatte. Der nächste Versuch war &#8222;forever&#8220;, was nun dafür sorgte der Prozess, sollte er denn sterben, automatisch neu gestartet wird.</p>
<p>Aber die beste Lösung die ich finden konnte war &#8222;<a href="https://github.com/Unitech/pm2">pm2</a>&#8222;. Der &#8222;Advanced, production process manager for Node.js&#8220; bietet neben Prozessüberwachung auch Unterstützung für Load Balancing, Logfile Management, Git Pull, uvm.</p>
<p>Installiert wird pm2 sehr einfach mit<br />
&gt; npm install pm2 -g</p>
<p>Unsere NodeJS Applikation kann dann gestartet werden:<br />
&gt; pm2 start app.js</p>
<p>Das meiste ist damit auch schon passiert. Pm2 kümmert führt die App nun aus und startet sie bei Bedarf neu.</p>
<p>Alle Prozesse auflisten lassen kann man mit<br />
&gt; pm2 list<br />
![List](storage/list.PNG)</p>
<p>Details zu einem bestimmten Prozess bekommt man durch die Eingabe von<br />
&gt; pm2 show appName/appId<br />
![Info](storage/info.PNG)</p>
<p>Und eine Überwachung aller Prozesse kann man sich so anzeigen lassen<br />
&gt; pm2 monit<br />
![Monit](storage/monit.PNG)</p>
<p>Besonders überzeugt hat mich pm2 wenn man Load Balancing einsetzen möchte. Dazu muss man die App lediglich mit einem weiteren Parameter starten:<br />
&gt; pm2 start app.js -i 4</p>
<p>Mit &#8222;-i 4&#8220; wird pm2 angewiesen 4 Workerinstanzen der Applikation zu starten. Die Anzahl der Worker kann man jederzeit mit<br />
&gt; pm2 scale appName 2</p>
<p>ändern (in dem Fall wird die Workeranzahl auf 2 reduziert).<br />
Das schöne dabei ist dass pm2 sich um das Clustering kümmert. Man muss also in der NodeJS App keine Load Balancing Funktion, das so genannte &#8222;Clustering&#8220; übernimmt komplett pm2.</p>
<p>Das bedeutet dieser Code wird dabei überflüssig:</p>
<pre><code class="JavaScript">
var cluster = require('cluster');  
var http    = require('http');  
var os      = require('os');

var numCPUs = os.cpus().length;

if (cluster.isMaster) {  
  // Master:
  // Let's fork as many workers as you have CPU cores

  for (var i = 0; i &lt; numCPUs; ++i) {
    cluster.fork();
  }
} else {
  // Worker:
  // Let's spawn a HTTP server
  // (Workers can share any TCP connection.
  //  In this case its a HTTP server)

  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world");
  }).listen(8080);
}</code></pre>
<p>Sondern man kann sich auf das wesentliche konzentrieren:</p>
<pre><code class="JavaScript">
var http = require('http');

http.createServer(function(req, res) {  
  res.writeHead(200);
  res.end("hello world");
}).listen(8080);</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://matthias.guru/2016/10/20/prozess-manager-fuer-nodejs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
