<?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>DEMARCQ.NET</title>
	<atom:link href="https://demarcq.net/feed" rel="self" type="application/rss+xml" />
	<link>https://demarcq.net</link>
	<description>Hébergement &#38; Infogérance depuis 1996</description>
	<lastBuildDate>Fri, 17 Jul 2026 02:42:15 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://demarcq.net/wp-content/uploads/2026/06/demarcq.net_.png</url>
	<title>DEMARCQ.NET</title>
	<link>https://demarcq.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Comment sécuriser ses tâches planifiées ?</title>
		<link>https://demarcq.net/comment-securiser-ses-taches-planifiees</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 14:38:54 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9284</guid>

					<description><![CDATA[<p>Comment sécuriser ses tâches planifiées (Cron jobs) sur un serveur de production ? Un script Cron qui s&#8217;exécute avec trop de privilèges, qui s&#8217;exécute en double ou qui échoue en silence représente un danger majeur pour la sécurité et l&#8217;intégrité de vos données. Règle 1 : Ne lancez jamais vos scripts sous l&#8217;utilisateur root Un [&#8230;]</p>
<p>The post <a href="https://demarcq.net/comment-securiser-ses-taches-planifiees">Comment sécuriser ses tâches planifiées ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Comment sécuriser ses tâches planifiées (Cron jobs) sur un serveur de production ?</h1>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-9287" src="https://demarcq.net/wp-content/uploads/2026/07/Comment-securiser-ses-taches-planifiees.webp" alt="" width="800" height="336" srcset="https://demarcq.net/wp-content/uploads/2026/07/Comment-securiser-ses-taches-planifiees.webp 800w, https://demarcq.net/wp-content/uploads/2026/07/Comment-securiser-ses-taches-planifiees-300x126.webp 300w, https://demarcq.net/wp-content/uploads/2026/07/Comment-securiser-ses-taches-planifiees-768x323.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p data-path-to-node="45">Un script Cron qui s&#8217;exécute avec trop de privilèges, qui s&#8217;exécute en double ou qui échoue en silence représente un danger majeur pour la sécurité et l&#8217;intégrité de vos données.</p>
<h3 data-path-to-node="46">Règle 1 : Ne lancez jamais vos scripts sous l&#8217;utilisateur <code data-path-to-node="46" data-index-in-node="58">root</code></h3>
<p data-path-to-node="47">Un script vulnérable exécuté en <code data-path-to-node="47" data-index-in-node="32">root</code> compromet instantanément l&#8217;intégralité du serveur dédié. Utilisez le cron de l&#8217;utilisateur applicatif dédié (ex: <code data-path-to-node="47" data-index-in-node="150">www-data</code>).</p>
<div class="code-block ng-tns-c1885327722-157 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQkgI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-157">
<div class="animated-opacity ng-tns-c1885327722-157">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-157 ng-star-inserted">
<p><span class="ng-tns-c1885327722-157">Bash</span></p>
<div class="buttons ng-tns-c1885327722-157 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-157"><code class="code-container formatted ng-tns-c1885327722-157" role="text" data-test-id="code-content"><span class="hljs-comment"># Modifier le cron d'un utilisateur spécifique</span>
crontab -u www-data -e
</code></pre>
</div>
</div>
</div>
<h3 data-path-to-node="49">Règle 2 : Déclarer un environnement d&#8217;exécution (PATH) explicite</h3>
<p data-path-to-node="50">Contrairement à votre terminal interactif, l&#8217;environnement d&#8217;un Cron est extrêmement restreint. Spécifiez toujours les chemins absolus pour vos binaires ou déclarez le <code data-path-to-node="50" data-index-in-node="168">PATH</code> en haut de votre fichier crontab :</p>
<div class="code-block ng-tns-c1885327722-158 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQkwI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-158">
<div class="animated-opacity ng-tns-c1885327722-158">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-158 ng-star-inserted">
<p><span class="ng-tns-c1885327722-158">Extrait de code</span></p>
<div class="buttons ng-tns-c1885327722-158 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-158"><code class="code-container formatted ng-tns-c1885327722-158" role="text" data-test-id="code-content">PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Exemple de tâche sécurisée avec chemins absolus
0 4 * * * /usr/bin/php /var/www/mon-projet/artisan backup:run
</code></pre>
</div>
</div>
</div>
<h3 data-path-to-node="52">Règle 3 : Éviter l&#8217;exécution simultanée (Overlap) avec <code data-path-to-node="52" data-index-in-node="55">flock</code></h3>
<p data-path-to-node="53">Si un script de synchronisation configuré pour tourner toutes les 5 minutes met finalement 10 minutes à s&#8217;exécuter, une deuxième instance va se lancer en parallèle. Cela provoque souvent des corruptions de données ou des surcharges CPU. Utilisez <code data-path-to-node="53" data-index-in-node="246">flock</code> pour verrouiller l&#8217;exécution :</p>
<div class="code-block ng-tns-c1885327722-159 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQlAI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-159">
<div class="animated-opacity ng-tns-c1885327722-159">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-159 ng-star-inserted">
<p><span class="ng-tns-c1885327722-159">Extrait de code</span></p>
<div class="buttons ng-tns-c1885327722-159 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-159"><code class="code-container formatted ng-tns-c1885327722-159" role="text" data-test-id="code-content">*/5 * * * * usr/bin/flock -n /tmp/mon_cron_sync.lock -c "/usr/bin/php /var/www/mon-projet/sync.php"
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="55"><i data-path-to-node="55" data-index-in-node="0">(Le commutateur <code data-path-to-node="55" data-index-in-node="16">-n</code> indique à flock de s&#8217;arrêter immédiatement sans attendre si le verrou est déjà actif).</i></p>
<h3 data-path-to-node="56">Règle 4 : Capturer et masquer la sortie standard, mais logger les erreurs</h3>
<p data-path-to-node="57">Ne laissez pas vos crons polluer les boîtes mail locales ou les fichiers de logs génériques. Redirigez la sortie standard (<code data-path-to-node="57" data-index-in-node="123">stdout</code>) vers le vide absolu <code data-path-to-node="57" data-index-in-node="151">/dev/null</code>, tout en capturant les erreurs (<code data-path-to-node="57" data-index-in-node="193">stderr</code>) :</p>
<div class="code-block ng-tns-c1885327722-160 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQlQI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-160">
<div class="animated-opacity ng-tns-c1885327722-160">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-160 ng-star-inserted">
<p><span class="ng-tns-c1885327722-160">Extrait de code</span></p>
<div class="buttons ng-tns-c1885327722-160 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-160"><code class="code-container formatted ng-tns-c1885327722-160" role="text" data-test-id="code-content">0 2 * * * /usr/bin/python3 /scripts/clean.py &gt; /dev/null 2&gt; /var/log/cron_e</code></pre>
</div>
</div>
</div><p>The post <a href="https://demarcq.net/comment-securiser-ses-taches-planifiees">Comment sécuriser ses tâches planifiées ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment mettre en place une limitation de débit avec Nginx ?</title>
		<link>https://demarcq.net/comment-mettre-en-place-une-limitation-de-debit-avec-nginx</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 14:38:03 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9282</guid>

					<description><![CDATA[<p>Comment mettre en place une stratégie efficace de limitation de débit (Rate Limiting) avec Nginx pour contrer les attaques force brute et le scraping ? &#160; Nginx intègre un moteur de limitation de débit très puissant basé sur l&#8217;algorithme du Leaky Bucket. Il permet de bloquer l&#8217;abus de requêtes sans perturber les utilisateurs légitimes. Étape [&#8230;]</p>
<p>The post <a href="https://demarcq.net/comment-mettre-en-place-une-limitation-de-debit-avec-nginx">Comment mettre en place une limitation de débit avec Nginx ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Comment mettre en place une stratégie efficace de limitation de débit (Rate Limiting) avec Nginx pour contrer les attaques force brute et le scraping ?</h1>
<p>&nbsp;</p>
<p data-path-to-node="35">Nginx intègre un moteur de limitation de débit très puissant basé sur l&#8217;algorithme du <i data-path-to-node="35" data-index-in-node="86">Leaky Bucket</i>. Il permet de bloquer l&#8217;abus de requêtes sans perturber les utilisateurs légitimes.</p>
<h3 data-path-to-node="36">Étape 1 : Définir la zone de stockage (<code data-path-to-node="36" data-index-in-node="39">limit_req_zone</code>)</h3>
<p data-path-to-node="37">Ouvrez votre fichier de configuration principal <code data-path-to-node="37" data-index-in-node="48">/etc/nginx/nginx.conf</code> ou le bloc <code data-path-to-node="37" data-index-in-node="81">http</code> de votre site :</p>
<div class="code-block ng-tns-c1885327722-155 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQkAI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-155">
<div class="animated-opacity ng-tns-c1885327722-155">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-155 ng-star-inserted"><span class="ng-tns-c1885327722-155">Nginx</span></p>
<div class="buttons ng-tns-c1885327722-155 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-155"><code class="code-container formatted ng-tns-c1885327722-155" role="text" data-test-id="code-content"><span class="hljs-section">http</span> {
    <span class="hljs-comment"># Crée une zone de 10 Mo nommée "login_limit" pour stocker les adresses IP (1 Mo = ~16 000 IP)</span>
    <span class="hljs-comment"># Limite le débit à 1 requête par seconde (1r/s) par adresse IP</span>
    <span class="hljs-attribute">limit_req_zone</span> $binary_remote_addr zone=login_limit:<span class="hljs-number">10m</span> rate=1r/s;
    
    <span class="hljs-comment"># Zone globale pour le reste du site (ex: 10 requêtes par seconde max)</span>
    <span class="hljs-attribute">limit_req_zone</span> $binary_remote_addr zone=global_limit:<span class="hljs-number">10m</span> rate=10r/s;
}
</code></pre>
</div>
</div>
</div>
<h3 data-path-to-node="39">Étape 2 : Appliquer les limitations sur vos routes sensibles</h3>
<p data-path-to-node="40">Dans la configuration de votre serveur virtuel (<code data-path-to-node="40" data-index-in-node="48">server</code> ou <code data-path-to-node="40" data-index-in-node="58">location</code>), appliquez ces zones :</p>
<div class="code-block ng-tns-c1885327722-156 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQkQI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-156">
<div class="animated-opacity ng-tns-c1885327722-156">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-156 ng-star-inserted"><span class="ng-tns-c1885327722-156">Nginx</span></p>
<div class="buttons ng-tns-c1885327722-156 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-156"><code class="code-container formatted ng-tns-c1885327722-156" role="text" data-test-id="code-content"><span class="hljs-section">server</span> {
    ...

    <span class="hljs-comment"># Protection des formulaires sensibles (Authentification, inscription, recherche)</span>
    <span class="hljs-attribute">location</span> /login {
        <span class="hljs-comment"># Applique la zone de limitation</span>
        <span class="hljs-attribute">limit_req_req</span> zone=login_limit burst=<span class="hljs-number">5</span> nodelay;
        
        <span class="hljs-comment"># Définit le code d'erreur renvoyé au client (429 Too Many Requests au lieu de 503)</span>
        <span class="hljs-attribute">limit_req_status</span> <span class="hljs-number">429</span>;
        
        <span class="hljs-attribute">proxy_pass</span> http://votre_backend;
    }

    <span class="hljs-comment"># Limitation générale sur le reste du site</span>
    <span class="hljs-attribute">location</span> / {
        <span class="hljs-comment"># burst=20 autorise temporairement jusqu'à 20 requêtes en rafale pour charger les assets (CSS, JS)</span>
        <span class="hljs-attribute">limit_req</span> zone=global_limit burst=<span class="hljs-number">20</span> nodelay;
        <span class="hljs-attribute">try_files</span> $uri $uri/ /index.php?$query_string;
    }
}
</code></pre>
</div>
</div>
</div>
<ul data-path-to-node="42">
<li>
<p data-path-to-node="42,0,0"><b data-path-to-node="42,0,0" data-index-in-node="0"><code data-path-to-node="42,0,0" data-index-in-node="0">burst=X</code> :</b> Crée une file d&#8217;attente tampon. Si un utilisateur dépasse le débit de base, ses requêtes excédentaires (jusqu&#8217;à X) sont acceptées mais traitées au rythme configuré.</p>
</li>
<li>
<p data-path-to-node="42,1,0"><b data-path-to-node="42,1,0" data-index-in-node="0"><code data-path-to-node="42,1,0" data-index-in-node="0">nodelay</code> :</b> Indispensable pour éviter de ralentir artificiellement l&#8217;affichage de votre site pour les utilisateurs légitimes. Les requêtes dans la limite du <code data-path-to-node="42,1,0" data-index-in-node="155">burst</code> sont exécutées immédiatement.</p>
</li>
</ul>
<div class="code-block ng-tns-c1885327722-160 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQlQI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-160">
<div class="animated-opacity ng-tns-c1885327722-160">
<pre class="ng-tns-c1885327722-160"><code class="code-container formatted ng-tns-c1885327722-160" role="text" data-test-id="code-content" data-path-to-node="44"></code></pre>
<p>&nbsp;</p>
</div>
</div>
</div><p>The post <a href="https://demarcq.net/comment-mettre-en-place-une-limitation-de-debit-avec-nginx">Comment mettre en place une limitation de débit avec Nginx ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment analyser les logs système</title>
		<link>https://demarcq.net/comment-analyser-les-logs-systeme</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 23:00:57 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9277</guid>

					<description><![CDATA[<p>Comment analyser les logs système (journald, syslog, dmesg) pour identifier une panne matérielle ou système imminente ? Attendre que votre serveur s&#8217;éteigne pour agir est une erreur critique. Le noyau Linux et le système d&#8217;exploitation envoient des signaux d&#8217;alerte bien avant la panne finale. Voici comment les traquer. dmesg : Le journal du noyau (Kernel) [&#8230;]</p>
<p>The post <a href="https://demarcq.net/comment-analyser-les-logs-systeme">Comment analyser les logs système</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Comment analyser les logs système (journald, syslog, dmesg) pour identifier une panne matérielle ou système imminente ?</h1>
<p><img decoding="async" class="aligncenter size-full wp-image-9278" src="https://demarcq.net/wp-content/uploads/2026/07/Capture-decran-du-2026-07-16-00-58-41.webp" alt="" width="750" height="507" srcset="https://demarcq.net/wp-content/uploads/2026/07/Capture-decran-du-2026-07-16-00-58-41.webp 750w, https://demarcq.net/wp-content/uploads/2026/07/Capture-decran-du-2026-07-16-00-58-41-300x203.webp 300w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<p data-path-to-node="26">Attendre que votre serveur s&#8217;éteigne pour agir est une erreur critique. Le noyau Linux et le système d&#8217;exploitation envoient des signaux d&#8217;alerte bien avant la panne finale. Voici comment les traquer.</p>
<h3 data-path-to-node="27">dmesg : Le journal du noyau (Kernel)</h3>
<p data-path-to-node="28"><code data-path-to-node="28" data-index-in-node="0">dmesg</code> affiche les messages du tampon circulaire du noyau. C&#8217;est l&#8217;outil numéro un pour repérer les défaillances physiques directes.</p>
<ul data-path-to-node="29">
<li>
<p data-path-to-node="29,0,0"><b data-path-to-node="29,0,0" data-index-in-node="0">Vérifier les erreurs d&#8217;écriture disque / SATA :</b></p>
<div class="code-block ng-tns-c1885327722-151 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjAI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-151">
<div class="animated-opacity ng-tns-c1885327722-151">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-151 ng-star-inserted">
<p><span class="ng-tns-c1885327722-151">Bash</span></p>
<div class="buttons ng-tns-c1885327722-151 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-151"><code class="code-container formatted ng-tns-c1885327722-151" role="text" data-test-id="code-content">dmesg | grep -Ei <span class="hljs-string">"ata|scsi|sd|sector|ext4|io error"</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="29,0,2"><i data-path-to-node="29,0,2" data-index-in-node="0">Signe d&#8217;alerte :</i> Des erreurs de type <code data-path-to-node="29,0,2" data-index-in-node="37">I/O error</code> ou <code data-path-to-node="29,0,2" data-index-in-node="50">Buffer I/O error on dev sda</code> indiquent que votre disque dur ou SSD est en train de rendre l&#8217;âme.</p>
</li>
<li>
<p data-path-to-node="29,1,0"><b data-path-to-node="29,1,0" data-index-in-node="0">Traquer l&#8217;instabilité de la mémoire RAM :</b></p>
<div class="code-block ng-tns-c1885327722-152 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjQI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-152">
<div class="animated-opacity ng-tns-c1885327722-152">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-152 ng-star-inserted">
<p><span class="ng-tns-c1885327722-152">Bash</span></p>
<div class="buttons ng-tns-c1885327722-152 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-152"><code class="code-container formatted ng-tns-c1885327722-152" role="text" data-test-id="code-content">dmesg | grep -i <span class="hljs-string">"MCE"</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="29,1,2"><i data-path-to-node="29,1,2" data-index-in-node="0">Signe d&#8217;alerte :</i> Les erreurs MCE (<i data-path-to-node="29,1,2" data-index-in-node="34">Machine Check Exception</i>) sont générées directement par le processeur lorsqu&#8217;il détecte une défaillance matérielle (souvent un problème de RAM ECC ou de surchauffe CPU).</p>
</li>
</ul>
<h3 data-path-to-node="30">journald et syslog : Les journaux du système</h3>
<p data-path-to-node="31">Avec <code data-path-to-node="31" data-index-in-node="5">systemd</code>, <code data-path-to-node="31" data-index-in-node="14">journalctl</code> centralise la majorité des logs.</p>
<ul data-path-to-node="32">
<li>
<p data-path-to-node="32,0,0"><b data-path-to-node="32,0,0" data-index-in-node="0">Lister uniquement les erreurs graves et critiques depuis le dernier démarrage :</b></p>
<div class="code-block ng-tns-c1885327722-153 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjgI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-153">
<div class="animated-opacity ng-tns-c1885327722-153">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-153 ng-star-inserted">
<p><span class="ng-tns-c1885327722-153">Bash</span></p>
<div class="buttons ng-tns-c1885327722-153 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-153"><code class="code-container formatted ng-tns-c1885327722-153" role="text" data-test-id="code-content">journalctl -p 0..3 -b
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="32,0,2"><i data-path-to-node="32,0,2" data-index-in-node="0">(Le paramètre <code data-path-to-node="32,0,2" data-index-in-node="14">-p 0..3</code> cible les niveaux Emergency, Alert, Critical et Error).</i></p>
</li>
<li>
<p data-path-to-node="32,1,0"><b data-path-to-node="32,1,0" data-index-in-node="0">Surveiller les kills par manque de mémoire (Out of Memory) :</b> Si votre serveur s&#8217;arrête de répondre de façon aléatoire ou si vos services (comme MySQL) coupent tout seuls :</p>
<div class="code-block ng-tns-c1885327722-154 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjwI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-154">
<div class="animated-opacity ng-tns-c1885327722-154">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-154 ng-star-inserted">
<p><span class="ng-tns-c1885327722-154">Bash</span></p>
<div class="buttons ng-tns-c1885327722-154 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-154"><code class="code-container formatted ng-tns-c1885327722-154" role="text" data-test-id="code-content">journalctl -ke | grep -i <span class="hljs-string">"oom-killer"</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="32,1,2">L&#8217;OOM-Killer intervient pour tuer les processus gourmands lorsque la RAM est totalement saturée.</p>
</li>
</ul>
<p>&nbsp;</p><p>The post <a href="https://demarcq.net/comment-analyser-les-logs-systeme">Comment analyser les logs système</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment configurer PHP-FPM pour maximiser les performances ?</title>
		<link>https://demarcq.net/comment-configurer-php-fpm-pour-maximiser-les-performances</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 22:53:12 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9271</guid>

					<description><![CDATA[<p>PHP-FPM : Comment configurer les modes dynamic, static ou ondemand pour maximiser les performances ? Le choix et la configuration du gestionnaire de processus (process manager ou pm) dans votre pool PHP-FPM déterminent la réactivité de vos applications PHP sous forte charge. Comparatif des 3 modes PHP-FPM Mode Fonctionnement Cas d&#8217;usage idéal Avantages / Inconvénients [&#8230;]</p>
<p>The post <a href="https://demarcq.net/comment-configurer-php-fpm-pour-maximiser-les-performances">Comment configurer PHP-FPM pour maximiser les performances ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>PHP-FPM : Comment configurer les modes dynamic, static ou ondemand pour maximiser les performances ?</h1>
<p data-path-to-node="15"><img decoding="async" class="wp-image-6568 pk-pin-it-ready lazyautosizes ls-is-cached pk-lazyloaded" title="Gestionnaires de processus PHP-FPM : « à la demande », « dynamique » et « statique »" src="https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static-1024x426.png" sizes="675px" srcset="https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static-300x125.png 300w, https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static-1024x426.png 1024w, https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static.png 1280w" alt="Gestionnaires de processus PHP-FPM : « à la demande », « dynamique » et « statique »" width="1024" height="426" data-pk-sizes="auto" data-ls-sizes="auto, (max-width: 1024px) 100vw, 1024px" data-pk-src="https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static-1024x426.png" data-pk-srcset="https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static-300x125.png 300w, https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static-1024x426.png 1024w, https://cdn.dakidarts.com/image/PHP-FPM-Process-Managers-ondemand-vs-dynamic-vs-static.png 1280w" />Le choix et la configuration du gestionnaire de processus (process manager ou <code data-path-to-node="15" data-index-in-node="78">pm</code>) dans votre pool PHP-FPM déterminent la réactivité de vos applications PHP sous forte charge.</p>
<h3 data-path-to-node="16">Comparatif des 3 modes PHP-FPM</h3>
<table data-path-to-node="17">
<thead>
<tr>
<td><strong>Mode</strong></td>
<td><strong>Fonctionnement</strong></td>
<td><strong>Cas d&#8217;usage idéal</strong></td>
<td><strong>Avantages / Inconvénients</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td><span data-path-to-node="17,1,0,0"><b data-path-to-node="17,1,0,0" data-index-in-node="0"><code data-path-to-node="17,1,0,0" data-index-in-node="0">static</code></b></span></td>
<td><span data-path-to-node="17,1,1,0">Un nombre fixe de processus (<code data-path-to-node="17,1,1,0" data-index-in-node="29">pm.max_children</code>) est lancé au démarrage et reste en mémoire.</span></td>
<td><span data-path-to-node="17,1,2,0">Serveurs dédiés de production avec un trafic stable et important.</span></td>
<td><span data-path-to-node="17,1,3,0"><b data-path-to-node="17,1,3,0" data-index-in-node="0">Le plus performant</b> (zéro latence de création de processus) mais consomme de la RAM en continu.</span></td>
</tr>
<tr>
<td><span data-path-to-node="17,2,0,0"><b data-path-to-node="17,2,0,0" data-index-in-node="0"><code data-path-to-node="17,2,0,0" data-index-in-node="0">dynamic</code></b></span></td>
<td><span data-path-to-node="17,2,1,0">Ajuste le nombre de processus de manière dynamique entre une valeur minimale et maximale.</span></td>
<td><span data-path-to-node="17,2,2,0">Hébergement mutualisé ou serveurs aux ressources modérées.</span></td>
<td><span data-path-to-node="17,2,3,0">Équilibré, mais la création/destruction de processus à la volée induit un léger overhead CPU.</span></td>
</tr>
<tr>
<td><span data-path-to-node="17,3,0,0"><b data-path-to-node="17,3,0,0" data-index-in-node="0"><code data-path-to-node="17,3,0,0" data-index-in-node="0">ondemand</code></b></span></td>
<td><span data-path-to-node="17,3,1,0">Aucun processus n&#8217;est lancé par défaut. Ils sont créés uniquement lorsqu&#8217;une requête arrive.</span></td>
<td><span data-path-to-node="17,3,2,0">Serveurs de dev, petits sites, ou serveurs hébergeant des dizaines de petits pools isolés.</span></td>
<td><span data-path-to-node="17,3,3,0"><b data-path-to-node="17,3,3,0" data-index-in-node="0">Économie maximale de RAM</b>, mais latence perceptible (le temps de spawner le process) sur la première requête.</span></td>
</tr>
</tbody>
</table>
<h3 data-path-to-node="18">Comment calculer vos limites de processus (<code data-path-to-node="18" data-index-in-node="43">pm.max_children</code>) ?</h3>
<p data-path-to-node="19">La mauvaise configuration de cette directive provoque l&#8217;erreur classique : <i data-path-to-node="19" data-index-in-node="75"><code data-path-to-node="19" data-index-in-node="75">[Server deadlocks / Gateway Timeout]</code></i>.</p>
<ol start="1" data-path-to-node="20">
<li>
<p data-path-to-node="20,0,0">Calculez la mémoire RAM moyenne consommée par un seul de vos processus PHP. Exécutez :</p>
<div class="code-block ng-tns-c1885327722-149 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQigI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-149">
<div class="animated-opacity ng-tns-c1885327722-149">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-149 ng-star-inserted">
<p><span class="ng-tns-c1885327722-149">Bash</span></p>
<div class="buttons ng-tns-c1885327722-149 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-149"><code class="code-container formatted ng-tns-c1885327722-149" role="text" data-test-id="code-content">ps -o rss -C php-fpm | tail -n +2 | awk <span class="hljs-string">'{sum+=$1} END {print sum/NR/1024 " MB"}'</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="20,0,2"><i data-path-to-node="20,0,2" data-index-in-node="0">(Disons que le résultat est de 50 MB par processus).</i></p>
</li>
<li>
<p data-path-to-node="20,1,0">Déterminez la RAM maximale que vous souhaitez allouer à PHP-FPM (ex: laissez au moins 1-2 GB pour le système, MySQL et Nginx). Sur un serveur de 8 GB, vous décidez d&#8217;allouer 5 GB à PHP.</p>
</li>
<li>
<p data-path-to-node="20,2,0">Calculez <code data-path-to-node="20,2,0" data-index-in-node="9">pm.max_children</code> : <span class="math-inline" data-math="5000 \text{ MB} / 50 \text{ MB} = 100" data-index-in-node="27">$5000 \text{ MB} / 50 \text{ MB} = 100$</span>.</p>
</li>
</ol>
<h3 data-path-to-node="21">Exemple de configuration optimale (<code data-path-to-node="21" data-index-in-node="35">static</code> pour production)</h3>
<p data-path-to-node="22">Modifiez le fichier de configuration de votre pool (ex: <code data-path-to-node="22" data-index-in-node="56">/etc/php/8.x/fpm/pool.d/www.conf</code>) :</p>
<div class="code-block ng-tns-c1885327722-150 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQiwI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-150">
<div class="animated-opacity ng-tns-c1885327722-150">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-150 ng-star-inserted">
<p><span class="ng-tns-c1885327722-150">Ini, TOML</span></p>
<div class="buttons ng-tns-c1885327722-150 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-150"><code class="code-container formatted ng-tns-c1885327722-150" role="text" data-test-id="code-content"><span class="hljs-attr">pm</span> = static
<span class="hljs-attr">pm.max_children</span> = <span class="hljs-number">100</span>
<span class="hljs-attr">pm.max_requests</span> = <span class="hljs-number">1000</span> <span class="hljs-comment"># Évite les fuites de mémoire en recyclant les processus après 1000 requêtes</span>
</code></pre>
</div>
</div>
</div>
<h2 data-path-to-node="25">3. Comment analyser les logs système (journald, syslog, dmesg) pour identifier une panne matérielle ou système imminente ?</h2>
<p data-path-to-node="26">Attendre que votre serveur s&#8217;éteigne pour agir est une erreur critique. Le noyau Linux et le système d&#8217;exploitation envoient des signaux d&#8217;alerte bien avant la panne finale. Voici comment les traquer.</p>
<h3 data-path-to-node="27">dmesg : Le journal du noyau (Kernel)</h3>
<p data-path-to-node="28"><code data-path-to-node="28" data-index-in-node="0">dmesg</code> affiche les messages du tampon circulaire du noyau. C&#8217;est l&#8217;outil numéro un pour repérer les défaillances physiques directes.</p>
<ul data-path-to-node="29">
<li>
<p data-path-to-node="29,0,0"><b data-path-to-node="29,0,0" data-index-in-node="0">Vérifier les erreurs d&#8217;écriture disque / SATA :</b></p>
<div class="code-block ng-tns-c1885327722-151 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjAI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-151">
<div class="animated-opacity ng-tns-c1885327722-151">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-151 ng-star-inserted">
<p><span class="ng-tns-c1885327722-151">Bash</span></p>
<div class="buttons ng-tns-c1885327722-151 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-151"><code class="code-container formatted ng-tns-c1885327722-151" role="text" data-test-id="code-content">dmesg | grep -Ei <span class="hljs-string">"ata|scsi|sd|sector|ext4|io error"</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="29,0,2"><i data-path-to-node="29,0,2" data-index-in-node="0">Signe d&#8217;alerte :</i> Des erreurs de type <code data-path-to-node="29,0,2" data-index-in-node="37">I/O error</code> ou <code data-path-to-node="29,0,2" data-index-in-node="50">Buffer I/O error on dev sda</code> indiquent que votre disque dur ou SSD est en train de rendre l&#8217;âme.</p>
</li>
<li>
<p data-path-to-node="29,1,0"><b data-path-to-node="29,1,0" data-index-in-node="0">Traquer l&#8217;instabilité de la mémoire RAM :</b></p>
<div class="code-block ng-tns-c1885327722-152 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjQI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-152">
<div class="animated-opacity ng-tns-c1885327722-152">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-152 ng-star-inserted">
<p><span class="ng-tns-c1885327722-152">Bash</span></p>
<div class="buttons ng-tns-c1885327722-152 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-152"><code class="code-container formatted ng-tns-c1885327722-152" role="text" data-test-id="code-content">dmesg | grep -i <span class="hljs-string">"MCE"</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="29,1,2"><i data-path-to-node="29,1,2" data-index-in-node="0">Signe d&#8217;alerte :</i> Les erreurs MCE (<i data-path-to-node="29,1,2" data-index-in-node="34">Machine Check Exception</i>) sont générées directement par le processeur lorsqu&#8217;il détecte une défaillance matérielle (souvent un problème de RAM ECC ou de surchauffe CPU).</p>
</li>
</ul>
<h3 data-path-to-node="30">journald et syslog : Les journaux du système</h3>
<p data-path-to-node="31">Avec <code data-path-to-node="31" data-index-in-node="5">systemd</code>, <code data-path-to-node="31" data-index-in-node="14">journalctl</code> centralise la majorité des logs.</p>
<ul data-path-to-node="32">
<li>
<p data-path-to-node="32,0,0"><b data-path-to-node="32,0,0" data-index-in-node="0">Lister uniquement les erreurs graves et critiques depuis le dernier démarrage :</b></p>
<div class="code-block ng-tns-c1885327722-153 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjgI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-153">
<div class="animated-opacity ng-tns-c1885327722-153">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-153 ng-star-inserted">
<p><span class="ng-tns-c1885327722-153">Bash</span></p>
<div class="buttons ng-tns-c1885327722-153 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-153"><code class="code-container formatted ng-tns-c1885327722-153" role="text" data-test-id="code-content">journalctl -p 0..3 -b
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="32,0,2"><i data-path-to-node="32,0,2" data-index-in-node="0">(Le paramètre <code data-path-to-node="32,0,2" data-index-in-node="14">-p 0..3</code> cible les niveaux Emergency, Alert, Critical et Error).</i></p>
</li>
<li>
<p data-path-to-node="32,1,0"><b data-path-to-node="32,1,0" data-index-in-node="0">Surveiller les kills par manque de mémoire (Out of Memory) :</b></p>
<p data-path-to-node="32,1,0">Si votre serveur s&#8217;arrête de répondre de façon aléatoire ou si vos services (comme MySQL) coupent tout seuls :</p>
<div class="code-block ng-tns-c1885327722-154 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQjwI">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-154">
<div class="animated-opacity ng-tns-c1885327722-154">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-154 ng-star-inserted">
<p><span class="ng-tns-c1885327722-154">Bash</span></p>
<div class="buttons ng-tns-c1885327722-154 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-154"><code class="code-container formatted ng-tns-c1885327722-154" role="text" data-test-id="code-content">journalctl -ke | grep -i <span class="hljs-string">"oom-killer"</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="32,1,2">L&#8217;OOM-Killer intervient pour tuer les processus gourmands lorsque la RAM est totalement saturée.</p>
</li>
</ul><p>The post <a href="https://demarcq.net/comment-configurer-php-fpm-pour-maximiser-les-performances">Comment configurer PHP-FPM pour maximiser les performances ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment diagnostiquer un goulot d&#8217;étranglement sur une base de données</title>
		<link>https://demarcq.net/comment-diagnostiquer-un-goulot-detranglement-sur-une-base-de-donnees</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 22:49:41 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9269</guid>

					<description><![CDATA[<p>Comment diagnostiquer un goulot d&#8217;étranglement (bottleneck) sur une base de données MySQL / PostgreSQL Un goulot d&#8217;étranglement sur une base de données ralentit l&#8217;ensemble de votre pile applicative. Pour diagnostiquer efficacement l&#8217;origine de la lenteur (disque, CPU, verrouillage), suivez cette méthodologie d&#8217;analyse. Étape 1 : Analyser l&#8217;utilisation des ressources système Avant de plonger dans le [&#8230;]</p>
<p>The post <a href="https://demarcq.net/comment-diagnostiquer-un-goulot-detranglement-sur-une-base-de-donnees">Comment diagnostiquer un goulot d’étranglement sur une base de données</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Comment diagnostiquer un goulot d&#8217;étranglement (bottleneck) sur une base de données MySQL / PostgreSQL</h1>
<p data-path-to-node="3"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9274" src="https://demarcq.net/wp-content/uploads/2026/07/Comment-diagnostiquer-un-goulot-detranglement-sur-une-base-de-donnees.png" alt="" width="624" height="576" srcset="https://demarcq.net/wp-content/uploads/2026/07/Comment-diagnostiquer-un-goulot-detranglement-sur-une-base-de-donnees.png 624w, https://demarcq.net/wp-content/uploads/2026/07/Comment-diagnostiquer-un-goulot-detranglement-sur-une-base-de-donnees-300x277.webp 300w" sizes="(max-width: 624px) 100vw, 624px" /></p>
<p data-path-to-node="3">Un goulot d&#8217;étranglement sur une base de données ralentit l&#8217;ensemble de votre pile applicative. Pour diagnostiquer efficacement l&#8217;origine de la lenteur (disque, CPU, verrouillage), suivez cette méthodologie d&#8217;analyse.</p>
<h3 data-path-to-node="4">Étape 1 : Analyser l&#8217;utilisation des ressources système</h3>
<p data-path-to-node="5">Avant de plonger dans le moteur SQL, utilisez des outils système pour identifier la ressource saturée :</p>
<ul data-path-to-node="6">
<li>
<p data-path-to-node="6,0,0"><b data-path-to-node="6,0,0" data-index-in-node="0"><code data-path-to-node="6,0,0" data-index-in-node="0">htop</code> ou <code data-path-to-node="6,0,0" data-index-in-node="8">top</code> :</b> Vérifiez si le processus <code data-path-to-node="6,0,0" data-index-in-node="39">mysqld</code> ou <code data-path-to-node="6,0,0" data-index-in-node="49">postgres</code> s&#8217;accapare l&#8217;intégralité du CPU.</p>
</li>
<li>
<p data-path-to-node="6,1,0"><b data-path-to-node="6,1,0" data-index-in-node="0"><code data-path-to-node="6,1,0" data-index-in-node="0">iotop</code> ou <code data-path-to-node="6,1,0" data-index-in-node="9">iostat -xz 1</code> :</b> Surveillez la valeur <code data-path-to-node="6,1,0" data-index-in-node="45">%util</code> (utilisation du disque) et le temps d&#8217;attente d&#8217;écriture (<code data-path-to-node="6,1,0" data-index-in-node="109">await</code>). Un disque saturé est le bottleneck le plus fréquent en base de données.</p>
</li>
</ul>
<h3 data-path-to-node="7">Étape 2 : Traquer les requêtes lentes (Slow Queries)</h3>
<p data-path-to-node="8">Identifiez les requêtes SQL mal indexées qui lisent des millions de lignes inutilement.</p>
<ul data-path-to-node="9">
<li>
<p data-path-to-node="9,0,0"><b data-path-to-node="9,0,0" data-index-in-node="0">Pour MySQL :</b> Activez le <i data-path-to-node="9,0,0" data-index-in-node="24">Slow Query Log</i> dans votre fichier <code data-path-to-node="9,0,0" data-index-in-node="58">/etc/mysql/my.cnf</code> :</p>
<div class="code-block ng-tns-c1885327722-114 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQ3QE">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-114">
<div class="animated-opacity ng-tns-c1885327722-114">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-114 ng-star-inserted">
<p><span class="ng-tns-c1885327722-114">Ini, TOML</span></p>
<div class="buttons ng-tns-c1885327722-114 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-114"><code class="code-container formatted ng-tns-c1885327722-114" role="text" data-test-id="code-content"><span class="hljs-attr">slow_query_log</span> = <span class="hljs-number">1</span>
<span class="hljs-attr">slow_query_log_file</span> = /var/log/mysql/mysql-slow.log
<span class="hljs-attr">long_query_time</span> = <span class="hljs-number">1.0</span> <span class="hljs-comment"># Logge les requêtes de plus d'une seconde</span>
<span class="hljs-attr">log_queries_not_using_indexes</span> = <span class="hljs-number">1</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="9,0,2">Analysez ensuite ce fichier avec <code data-path-to-node="9,0,2" data-index-in-node="33">mysqldumpslow</code> ou l&#8217;outil <b data-path-to-node="9,0,2" data-index-in-node="58">pt-query-digest</b> (Percona Toolkit).</p>
</li>
<li>
<p data-path-to-node="9,1,0"><b data-path-to-node="9,1,0" data-index-in-node="0">Pour PostgreSQL :</b> Utilisez l&#8217;extension incontournable <code data-path-to-node="9,1,0" data-index-in-node="54">pg_stat_statements</code>. Ajoutez ceci dans <code data-path-to-node="9,1,0" data-index-in-node="92">postgresql.conf</code> :</p>
<div class="code-block ng-tns-c1885327722-115 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQ3gE">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-115">
<div class="animated-opacity ng-tns-c1885327722-115">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-115 ng-star-inserted">
<p><span class="ng-tns-c1885327722-115">Ini, TOML</span></p>
<div class="buttons ng-tns-c1885327722-115 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-115"><code class="code-container formatted ng-tns-c1885327722-115" role="text" data-test-id="code-content"><span class="hljs-attr">shared_preload_libraries</span> = <span class="hljs-string">'pg_stat_statements'</span>
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="9,1,2">Puis exécutez cette requête pour lister les requêtes les plus gourmandes en temps cumulé :</p>
<div class="code-block ng-tns-c1885327722-116 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwidjrSl4sqVAxUAAAAAHQAAAAAQ3wE">
<div class="formatted-code-block-internal-container ng-tns-c1885327722-116">
<div class="animated-opacity ng-tns-c1885327722-116">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1885327722-116 ng-star-inserted">
<p><span class="ng-tns-c1885327722-116">SQL</span></p>
<div class="buttons ng-tns-c1885327722-116 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1885327722-116"><code class="code-container formatted ng-tns-c1885327722-116" role="text" data-test-id="code-content"><span class="hljs-keyword">SELECT</span> query, calls, total_exec_time, <span class="hljs-keyword">rows</span> <span class="hljs-keyword">FROM</span> pg_stat_statements <span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> total_exec_time <span class="hljs-keyword">DESC</span> LIMIT <span class="hljs-number">10</span>;
</code></pre>
</div>
</div>
</div>
</li>
</ul>
<h3 data-path-to-node="10">Étape 3 : Diagnostiquer les verrous (Locks)</h3>
<p data-path-to-node="11">Deux requêtes concurrentes qui s&#8217;attendent mutuellement peuvent paralyser votre base.</p>
<ul data-path-to-node="12">
<li>
<p data-path-to-node="12,0,0"><b data-path-to-node="12,0,0" data-index-in-node="0">MySQL :</b> Visualisez l&#8217;état des verrous avec <code data-path-to-node="12,0,0" data-index-in-node="43">SHOW ENGINE INNODB STATUS;</code> ou examinez la table <code data-path-to-node="12,0,0" data-index-in-node="91">information_schema.innodb_trx</code>.</p>
</li>
<li>
<p data-path-to-node="12,1,0"><b data-path-to-node="12,1,0" data-index-in-node="0">PostgreSQL :</b> Détectez les blocages actifs grâce à la table système <code data-path-to-node="12,1,0" data-index-in-node="67">pg_locks</code> jointe à <code data-path-to-node="12,1,0" data-index-in-node="85">pg_stat_activity</code> pour repérer quelle transaction bloque les autres.</p>
</li>
</ul><p>The post <a href="https://demarcq.net/comment-diagnostiquer-un-goulot-detranglement-sur-une-base-de-donnees">Comment diagnostiquer un goulot d’étranglement sur une base de données</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment diagnostiquer une baisse de performance sur son serveur dédié ?</title>
		<link>https://demarcq.net/baisse-de-performance-sur-son-serveur-dedie</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Fri, 03 Jul 2026 21:18:24 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9195</guid>

					<description><![CDATA[<p>Comment diagnostiquer une baisse de performance ou une panne sur son serveur dédié ? Lorsqu’un serveur dédié ralentit ou ne répond plus, chaque minute compte. Face à l&#8217;urgence, une méthodologie de diagnostic structurée permet de remonter rapidement à la source du problème, qu&#8217;il s&#8217;agisse d&#8217;une surcharge de ressources ou d&#8217;une erreur applicative. Voici le guide [&#8230;]</p>
<p>The post <a href="https://demarcq.net/baisse-de-performance-sur-son-serveur-dedie">Comment diagnostiquer une baisse de performance sur son serveur dédié ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 data-path-to-node="8,1,0"><b data-path-to-node="8,1,0" data-index-in-node="0">Comment diagnostiquer une baisse de performance ou une panne sur son serveur dédié ?</b></h2>
<p>Lorsqu’un serveur dédié ralentit ou ne répond plus, chaque minute compte. Face à l&#8217;urgence, une méthodologie de diagnostic structurée permet de remonter rapidement à la source du problème, qu&#8217;il s&#8217;agisse d&#8217;une surcharge de ressources ou d&#8217;une erreur applicative. Voici le guide de secours pour identifier le goulot d&#8217;étranglement.<br />
Étape 1 : Traquer les processus gourmands en temps réel</p>
<p>Le premier réflexe consiste à se connecter en SSH et à analyser l&#8217;état de la machine. Lancez la commande top ou, idéalement, htop (plus visuelle).</p>
<p>Regardez immédiatement la Load Average (charge moyenne) en haut à droite : si elle dépasse largement le nombre de cœurs de votre processeur, le serveur est saturé. Identifiez ensuite le coupable dans la liste : un processus PHP-FPM qui s&#8217;emballe ? Une requête MySQL mal optimisée qui bloque le CPU ? Un manque de mémoire RAM qui force le serveur à swapper ? htop vous donne la réponse en un coup d&#8217;œil.<br />
Étape 2 : Analyser les journaux système (Syslog)</p>
<p>Si le serveur a planté ou si un service s&#8217;est arrêté brusquement (comme MySQL victime du Out Of Memory Killer), la mémoire vive a probablement saturé. Pour le vérifier, examinez les logs système généraux avec la commande suivante :<br />
sudo tail -n 100 /var/log/syslog (ou /var/log/messages sur CentOS/RHEL). Vous y trouverez les alertes matérielles et les arrêts critiques de services.<br />
Étape 3 : Inspecter les logs des serveurs web (Apache / Nginx)</p>
<p>La panne peut aussi être causée par une surcharge de trafic ou une attaque par déni de service (DDoS). Inspectez les fichiers de votre serveur web :</p>
<p>Les Access Logs (/var/log/nginx/access.log ou /var/log/apache2/access.log) : Un volume anormal de requêtes identiques provenant d&#8217;une même adresse IP indique souvent une attaque ou un bot malveillant à bannir.</p>
<p>Les Error Logs (/var/log/nginx/error.log) : Ils révèlent les scripts PHP défaillants, les ruptures de communication avec la base de données ou les problèmes de permissions de fichiers.</p>
<p>En combinant l&#8217;analyse des ressources matérielles et la lecture des logs, vous transformez une panne inexpliquée en un problème technique simple à résoudre.</p><p>The post <a href="https://demarcq.net/baisse-de-performance-sur-son-serveur-dedie">Comment diagnostiquer une baisse de performance sur son serveur dédié ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Plan de Reprise d’Activité (PRA) informatique</title>
		<link>https://demarcq.net/plan-de-reprise-dactivite-pra-informatique</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Thu, 02 Jul 2026 21:16:42 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9193</guid>

					<description><![CDATA[<p>Plan de Reprise d’Activité (PRA) informatique : Comment garantir la continuité de vos services ? Incendie, cyberattaque par ransomware, panne matérielle majeure ou simple erreur humaine : le risque zéro n&#8217;existe pas en informatique. Face à un sinistre, la question n&#8217;est pas de savoir si vous allez être touché, mais quand vous le serez. Le [&#8230;]</p>
<p>The post <a href="https://demarcq.net/plan-de-reprise-dactivite-pra-informatique">Plan de Reprise d’Activité (PRA) informatique</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2>Plan de Reprise d’Activité (PRA) informatique : Comment garantir la continuité de vos services ?</h2>
<p data-path-to-node="0">Incendie, cyberattaque par ransomware, panne matérielle majeure ou simple erreur humaine : le risque zéro n&#8217;existe pas en informatique. Face à un sinistre, la question n&#8217;est pas de savoir <i data-path-to-node="0" data-index-in-node="188">si</i> vous allez être touché, mais <i data-path-to-node="0" data-index-in-node="220">quand</i> vous le serez.</p>
<p data-path-to-node="1">Le <b data-path-to-node="1" data-index-in-node="3">Plan de Reprise d&#8217;Activité (PRA)</b> est la police d&#8217;assurance de votre infrastructure. Il regroupe l&#8217;ensemble des procédures techniques et organisationnelles permettant de reconstruire vos serveurs et de relancer vos services après un arrêt critique.</p>
<p data-path-to-node="2">Voici les clés pour bâtir un PRA solide, centré sur le véritable moteur de la reprise : <b data-path-to-node="2" data-index-in-node="88">la stratégie de sauvegarde</b>.</p>
<h2 data-path-to-node="4">1. Définir les deux indicateurs stratégiques : RTO et RPO</h2>
<p data-path-to-node="5">Avant de parler technique, vous devez fixer le seuil de tolérance de votre entreprise à travers deux métriques fondamentales :</p>
<ul data-path-to-node="6">
<li>
<p data-path-to-node="6,0,0"><b data-path-to-node="6,0,0" data-index-in-node="0">Le RPO (<i data-path-to-node="6,0,0" data-index-in-node="8">Recovery Point Objective</i> &#8211; Perte de données maximale admissible) :</b> Quelle quantité de données pouvez-vous vous permettre de perdre ? Si votre dernière sauvegarde a 24 heures et que votre serveur crash, vous perdez une journée de travail. Pour des données critiques, le RPO doit souvent être réduit à quelques minutes.</p>
</li>
<li>
<p data-path-to-node="6,1,0"><b data-path-to-node="6,1,0" data-index-in-node="0">Le RTO (<i data-path-to-node="6,1,0" data-index-in-node="8">Recovery Time Objective</i> &#8211; Durée maximale d&#8217;interruption admissible) :</b> Combien de temps votre entreprise peut-elle rester à l&#8217;arrêt ? C&#8217;est le temps nécessaire pour restaurer vos systèmes et rouvrir les accès aux utilisateurs.</p>
</li>
</ul>
<h2 data-path-to-node="8">2. Le cœur du PRA : L&#8217;automatisation des sauvegardes</h2>
<p data-path-to-node="9">Compter sur une action humaine pour effectuer une sauvegarde est le meilleur moyen d&#8217;échouer le jour où le sinistre survient. L&#8217;oubli d&#8217;une clé USB ou le report d&#8217;une manipulation à un lendemain &#8220;plus calme&#8221; sont des classiques du crash informatique.</p>
<ul data-path-to-node="10">
<li>
<p data-path-to-node="10,0,0"><b data-path-to-node="10,0,0" data-index-in-node="0">L&#8217;automatisation élimine le facteur humain.</b> Vos scripts (qu&#8217;il s&#8217;agisse de snapshots de machines virtuelles, de dumps de bases de données ou de synchronisations de fichiers) doivent s&#8217;exécuter à intervalles réguliers (toutes les heures, toutes les nuits) sans aucune intervention.</p>
</li>
<li>
<p data-path-to-node="10,1,0"><b data-path-to-node="10,1,0" data-index-in-node="0">Le monitoring des sauvegardes :</b> Une sauvegarde automatisée qui échoue en arrière-plan sans prévenir est invisible&#8230; jusqu&#8217;au jour de la restauration. Vos outils de supervision (ou des rapports quotidiens par email/Slack) doivent valider le succès de chaque tâche.</p>
</li>
</ul>
<h2 data-path-to-node="12">3. L&#8217;externalisation : La règle d&#8217;or du 3-2-1</h2>
<p data-path-to-node="13">Sauvegarder vos serveurs sur un disque dur posé sur la même baie informatique ou dans la même pièce ne sert à rien si le bâtiment subit un incendie ou un dégât des eaux. De même, si un ransomware chiffre votre réseau, il infectera également vos sauvegardes locales si elles sont accessibles.</p>
<p data-path-to-node="14">Pour sécuriser vos données, appliquez rigoureusement la <b data-path-to-node="14" data-index-in-node="56">stratégie de sauvegarde 3-2-1</b> :</p>
<ul data-path-to-node="15">
<li>
<p data-path-to-node="15,0,0"><b data-path-to-node="15,0,0" data-index-in-node="0">3</b> copies de vos données au total (la production + 2 sauvegardes).</p>
</li>
<li>
<p data-path-to-node="15,1,0"><b data-path-to-node="15,1,0" data-index-in-node="0">2</b> supports différents (par exemple : un stockage local NAS et un stockage Cloud).</p>
</li>
<li>
<p data-path-to-node="15,2,0"><b data-path-to-node="15,2,0" data-index-in-node="0">1</b> copie <b data-path-to-node="15,2,0" data-index-in-node="8">externalisée</b>, hors de votre infrastructure principale (Cloud sécurisé, deuxième centre de données géographiquement distant).</p>
</li>
</ul>
<blockquote data-path-to-node="16">
<p data-path-to-node="16,0"><b data-path-to-node="16,0" data-index-in-node="0">L&#8217;importance de l&#8217;immuabilité (Object Lock) :</b> Pour contrer les rançongiciels les plus agressifs qui cherchent à détruire vos sauvegardes cloud, optez pour des stockages externalisés dits <i data-path-to-node="16,0" data-index-in-node="187">immuables</i>. Une fois écrites, les données ne peuvent être ni modifiées ni supprimées pendant une période définie, même avec les identifiants administrateur.</p>
</blockquote>
<h2 data-path-to-node="18">4. Un PRA n&#8217;existe que s&#8217;il est testé</h2>
<p data-path-to-node="19">Le piège le plus courant est de rédiger un magnifique document de PRA, de configurer les sauvegardes, puis de refermer le dossier.</p>
<p data-path-to-node="20">Une stratégie de sauvegarde n&#8217;est valide que si la procédure de <b data-path-to-node="20" data-index-in-node="64">restauration</b> fonctionne. Un fichier de sauvegarde peut être corrompu, une clé de chiffrement peut être perdue, ou le temps de téléchargement depuis le cloud peut s&#8217;avérer beaucoup plus long que prévu (impactant directement votre RTO).</p>
<ul data-path-to-node="21">
<li>
<p data-path-to-node="21,0,0"><b data-path-to-node="21,0,0" data-index-in-node="0">Simulez des pannes :</b> Organisez au moins une à deux fois par an un &#8220;exercice de crise&#8221;.</p>
</li>
<li>
<p data-path-to-node="21,1,0"><b data-path-to-node="21,1,0" data-index-in-node="0">Restaurer à blanc :</b> Testez la reconstruction d&#8217;un serveur web ou d&#8217;une base de données sur un environnement isolé pour mesurer le temps réel de reprise et ajuster vos procédures.</p>
</li>
</ul>
<blockquote data-path-to-node="23">
<p data-path-to-node="23,0"><b data-path-to-node="23,0" data-index-in-node="0">En résumé :</b> Le PRA n&#8217;est pas un projet informatique optionnel, c&#8217;est une stratégie de survie d&#8217;entreprise. Automatiser pour ne pas oublier, externaliser pour se protéger des sinistres physiques, et tester pour garantir l&#8217;efficacité : voilà le triptyque d&#8217;une infrastructure résiliente.</p>
</blockquote><p>The post <a href="https://demarcq.net/plan-de-reprise-dactivite-pra-informatique">Plan de Reprise d’Activité (PRA) informatique</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pourquoi et comment mettre en place un système de cache</title>
		<link>https://demarcq.net/systeme-de-cache-hebergement</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Wed, 01 Jul 2026 21:14:30 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9190</guid>

					<description><![CDATA[<p>Pourquoi et comment mettre en place un système de cache (Redis / Memcached) sur votre hébergement ? Chaque seconde de chargement supplémentaire sur un site web fait fuir vos visiteurs et dégrade votre référencement SEO. Pour un CMS dynamique comme WordPress, chaque affichage de page impose au serveur d’exécuter du code PHP et d&#8217;interroger la [&#8230;]</p>
<p>The post <a href="https://demarcq.net/systeme-de-cache-hebergement">Pourquoi et comment mettre en place un système de cache</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 data-path-to-node="2">Pourquoi et comment mettre en place un système de cache (Redis / Memcached) sur votre hébergement ?</h2>
<p data-path-to-node="3">Chaque seconde de chargement supplémentaire sur un site web fait fuir vos visiteurs et dégrade votre référencement SEO. Pour un CMS dynamique comme WordPress, chaque affichage de page impose au serveur d’exécuter du code PHP et d&#8217;interroger la base de données MySQL. Face à un pic de trafic, ce processus sature rapidement les ressources. La solution ? Implémenter un <b data-path-to-node="3" data-index-in-node="368">système de cache côté serveur</b> avec Redis ou Memcached.</p>
<h3 data-path-to-node="4">L&#8217;impact du cache d&#8217;objets sur les performances</h3>
<p data-path-to-node="5">Le principe du cache en mémoire RAM (Object Cache) est simple : au lieu de reconstruire la page à chaque requête, le serveur stocke les résultats des requêtes de base de données les plus fréquentes dans la mémoire vive.</p>
<p data-path-to-node="6">Lorsqu&#8217;un nouvel utilisateur visite le site, le serveur distribue instantanément les données pré-calculées depuis la RAM, dont la vitesse de lecture est infiniment supérieure à celle d&#8217;un disque dur (même NVMe). L&#8217;impact est immédiat : le temps de réponse du serveur (TTFB) s&#8217;effondre, la charge CPU diminue drastiquement et votre site peut supporter dix fois plus de connexions simultanées.</p>
<h3 data-path-to-node="7">Redis vs Memcached : Lequel choisir ?</h3>
<ul data-path-to-node="8">
<li>
<p data-path-to-node="8,0,0"><b data-path-to-node="8,0,0" data-index-in-node="0">Memcached</b> est une solution historique, réputée pour sa simplicité et son efficacité brute sur les structures de données simples.</p>
</li>
<li>
<p data-path-to-node="8,1,0"><b data-path-to-node="8,1,0" data-index-in-node="0">Redis</b>, plus moderne, est souvent privilégié aujourd&#8217;hui. Il offre des fonctionnalités avancées (persistance des données, réplication) et s&#8217;avère particulièrement redoutable pour booster l&#8217;infrastructure de sites e-commerce complexes.</p>
</li>
</ul>
<h3 data-path-to-node="9">Comment le mettre en place en 3 étapes ?</h3>
<ol start="1" data-path-to-node="10">
<li>
<p data-path-to-node="10,0,0"><b data-path-to-node="10,0,0" data-index-in-node="0">Activation sur le serveur :</b> Installez le composant Redis ou Memcached depuis le panneau de contrôle de votre hébergement (cPanel, Plesk) ou via votre infogéreur.</p>
</li>
<li>
<p data-path-to-node="10,1,0"><b data-path-to-node="10,1,0" data-index-in-node="0">Liaison PHP :</b> Activez l&#8217;extension PHP correspondante (<code data-path-to-node="10,1,0" data-index-in-node="54">php-redis</code> ou <code data-path-to-node="10,1,0" data-index-in-node="67">php-memcached</code>) pour que votre environnement puisse communiquer avec le cache.</p>
</li>
<li>
<p data-path-to-node="10,2,0"><b data-path-to-node="10,2,0" data-index-in-node="0">Configuration du CMS :</b> Sur WordPress, installez une extension de performance de confiance (comme <i data-path-to-node="10,2,0" data-index-in-node="97">LiteSpeed Cache</i>, <i data-path-to-node="10,2,0" data-index-in-node="114">W3 Total Cache</i> ou <i data-path-to-node="10,2,0" data-index-in-node="132">Redis Object Cache</i>) et renseignez les identifiants de connexion.</p>
</li>
</ol>
<p data-path-to-node="11">Mettre en place un cache de données est l&#8217;optimisation technique la plus rentable pour offrir une expérience utilisateur fluide et ultra-rapide.</p><p>The post <a href="https://demarcq.net/systeme-de-cache-hebergement">Pourquoi et comment mettre en place un système de cache</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment optimiser la configuration de votre serveur web (Apache / Nginx) pour le trafic de masse ?</title>
		<link>https://demarcq.net/optimiser-serveur-web</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 21:11:46 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9188</guid>

					<description><![CDATA[<p> Comment optimiser la configuration de votre serveur web (Apache / Nginx) pour le trafic de masse ? Optimiser un serveur web pour absorber un trafic de masse ne consiste pas seulement à lui ajouter de la RAM ou du CPU. Il s&#8217;agit d&#8217;ajuster sa configuration pour qu&#8217;il gère les connexions simultanées sans gaspiller les ressources. [&#8230;]</p>
<p>The post <a href="https://demarcq.net/optimiser-serveur-web">Comment optimiser la configuration de votre serveur web (Apache / Nginx) pour le trafic de masse ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 data-path-to-node="0"> Comment optimiser la configuration de votre serveur web (Apache / Nginx) pour le trafic de masse ?</h2>
<p data-path-to-node="0">Optimiser un serveur web pour absorber un trafic de masse ne consiste pas seulement à lui ajouter de la RAM ou du CPU. Il s&#8217;agit d&#8217;ajuster sa configuration pour qu&#8217;il gère les connexions simultanées sans gaspiller les ressources.</p>
<p data-path-to-node="1">Voici les clés techniques de &#8220;tuning&#8221; pour Apache et Nginx afin de maximiser leurs performances.</p>
<h2 data-path-to-node="3">1. Nginx : L&#8217;as des connexions simultanées</h2>
<p data-path-to-node="4">Nginx utilise une architecture événementielle (asynchrone), ce qui le rend naturellement très performant pour le trafic de masse. Voici les paramètres à modifier dans <code data-path-to-node="4" data-index-in-node="167">/etc/nginx/nginx.conf</code> :</p>
<h3 data-path-to-node="5">Ajuster les Workers (Processus)</h3>
<ul data-path-to-node="6">
<li>
<p data-path-to-node="6,0,0"><b data-path-to-node="6,0,0" data-index-in-node="0"><code data-path-to-node="6,0,0" data-index-in-node="0">worker_processes auto;</code></b> : Permet à Nginx de créer un processus par cœur de processeur disponible.</p>
</li>
<li>
<p data-path-to-node="6,1,0"><b data-path-to-node="6,1,0" data-index-in-node="0"><code data-path-to-node="6,1,0" data-index-in-node="0">worker_connections 1024;</code></b> (ou plus, ex: 4096) : C&#8217;est le nombre maximum de connexions simultanées que chaque <i data-path-to-node="6,1,0" data-index-in-node="108">worker</i> peut gérer.</p>
<blockquote data-path-to-node="6,1,1">
<p data-path-to-node="6,1,1,0"><b data-path-to-node="6,1,1,0" data-index-in-node="0">Calcul de la capacité max :</b> <code data-path-to-node="6,1,1,0" data-index-in-node="28">worker_processes</code> <span class="math-inline" data-math="\times" data-index-in-node="45"><span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord">×</span></span></span></span></span> <code data-path-to-node="6,1,1,0" data-index-in-node="52">worker_connections</code> = Nombre max de clients simultanés.</p>
</blockquote>
</li>
</ul>
<h3 data-path-to-node="7">Optimiser la gestion des fichiers et connexions</h3>
<div class="code-block ng-tns-c953698785-127 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjL6efYhp6VAxUAAAAAHQAAAAAQ_AY">
<div class="formatted-code-block-internal-container ng-tns-c953698785-127">
<div class="animated-opacity ng-tns-c953698785-127">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c953698785-127 ng-star-inserted">
<p><span class="ng-tns-c953698785-127">Nginx</span></p>
<div class="buttons ng-tns-c953698785-127 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c953698785-127"><code class="code-container formatted ng-tns-c953698785-127" role="text" data-test-id="code-content"><span class="hljs-section">events</span> {
    <span class="hljs-attribute">worker_connections</span> <span class="hljs-number">4096</span>;
    <span class="hljs-attribute">use</span> <span class="hljs-literal">epoll</span>; <span class="hljs-comment"># Optimisation spécifique à Linux pour gérer efficacement les connexions</span>
    <span class="hljs-attribute">multi_accept</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># Demande aux workers d'accepter toutes les nouvelles connexions d'un coup</span>
}

<span class="hljs-section">http</span> {
    <span class="hljs-attribute">sendfile</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># Accélère l'envoi des fichiers en évitant la copie de données en mémoire tampon</span>
    <span class="hljs-attribute">tcp_nopush</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># Envoie les en-têtes HTTP en un seul paquet (idéal pour la bande passante)</span>
    <span class="hljs-attribute">tcp_nodelay</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># Force l'envoi immédiat des données (réduit la latence des petits paquets)</span>
    
    <span class="hljs-attribute">keepalive_timeout</span> <span class="hljs-number">30</span>; <span class="hljs-comment"># Réduit le temps d'attente des connexions inactives pour libérer les slots</span>
    <span class="hljs-attribute">keepalive_requests</span> <span class="hljs-number">500</span>; <span class="hljs-comment"># Nombre de requêtes autorisées par connexion persistante</span>
}
</code></pre>
</div>
</div>
</div>
<h2 data-path-to-node="10">2. Apache : Le passage obligatoire à MPM Event</h2>
<p data-path-to-node="11">Si vous utilisez encore le vieux module <i data-path-to-node="11" data-index-in-node="40">Prefork</i> d&#8217;Apache, votre serveur s&#8217;effondrera sous le trafic de masse car il crée un processus lourd par utilisateur. Pour le trafic de masse, vous <b data-path-to-node="11" data-index-in-node="187">devez</b> utiliser le module <b data-path-to-node="11" data-index-in-node="212">MPM Event</b> (généralement couplé à PHP-FPM).</p>
<p data-path-to-node="12">Modifiez le fichier de configuration du module (ex: <code data-path-to-node="12" data-index-in-node="52">/etc/apache2/mods-enabled/mpm_event.conf</code>) :</p>
<div class="code-block ng-tns-c953698785-128 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjL6efYhp6VAxUAAAAAHQAAAAAQ_QY">
<div class="formatted-code-block-internal-container ng-tns-c953698785-128">
<div class="animated-opacity ng-tns-c953698785-128">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c953698785-128 ng-star-inserted">
<p><span class="ng-tns-c953698785-128">Apache</span></p>
<div class="buttons ng-tns-c953698785-128 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c953698785-128"><code class="code-container formatted ng-tns-c953698785-128" role="text" data-test-id="code-content"><span class="hljs-section">&lt;IfModule mpm_event_module&gt;</span>
    <span class="hljs-attribute">StartServers</span>             <span class="hljs-number">4</span>
    <span class="hljs-attribute">MinSpareThreads</span>          <span class="hljs-number">25</span>
    <span class="hljs-attribute">MaxSpareThreads</span>          <span class="hljs-number">75</span>
    <span class="hljs-attribute">ThreadLimit</span>              <span class="hljs-number">64</span>
    <span class="hljs-attribute">ThreadsPerChild</span>          <span class="hljs-number">25</span>
    <span class="hljs-attribute">MaxRequestWorkers</span>        <span class="hljs-number">1000</span>  # Le paramètre CRITIQUE (anciennement MaxClients)
    <span class="hljs-attribute">MaxConnectionsPerChild</span>   <span class="hljs-number">5000</span>  # Relance les processus après X requêtes pour éviter les fuites de mémoire
<span class="hljs-section">&lt;/IfModule&gt;</span>
</code></pre>
</div>
</div>
</div>
<ul data-path-to-node="14">
<li>
<p data-path-to-node="14,0,0"><b data-path-to-node="14,0,0" data-index-in-node="0"><code data-path-to-node="14,0,0" data-index-in-node="0">MaxRequestWorkers</code> :</b> C&#8217;est la limite absolue de requêtes simultanées traitées.</p>
<blockquote data-path-to-node="14,0,1">
<p data-path-to-node="14,0,1,0"><b data-path-to-node="14,0,1,0" data-index-in-node="0">Attention au calcul :</b> Assurez-vous que votre RAM peut supporter ce nombre. Si un processus Apache consomme 50 Mo et que vous fixez <code data-path-to-node="14,0,1,0" data-index-in-node="131">MaxRequestWorkers</code> à 1000, Apache peut consommer jusqu&#8217;à 50 Go de RAM en pic de trafic.</p>
</blockquote>
</li>
</ul>
<h2 data-path-to-node="16">3. Techniques globales indispensables (Valables pour les deux)</h2>
<h3 data-path-to-node="17">Le Keep-Alive : Trouver le bon équilibre</h3>
<p data-path-to-node="18">Le <i data-path-to-node="18" data-index-in-node="3">Keep-Alive</i> permet de maintenir la connexion ouverte entre le serveur et le navigateur pour charger plusieurs fichiers (images, CSS, JS) sans rouvrir une connexion à chaque fois.</p>
<ul data-path-to-node="19">
<li>
<p data-path-to-node="19,0,0"><b data-path-to-node="19,0,0" data-index-in-node="0">Trafic modéré :</b> Activez-le (<code data-path-to-node="19,0,0" data-index-in-node="28">KeepAlive On</code> ou <code data-path-to-node="19,0,0" data-index-in-node="44">keepalive_timeout 65</code>).</p>
</li>
<li>
<p data-path-to-node="19,1,0"><b data-path-to-node="19,1,0" data-index-in-node="0">Trafic de masse extrême :</b> Réduisez le timeout à <b data-path-to-node="19,1,0" data-index-in-node="48">2 ou 5 secondes</b>, ou désactivez-le si vous utilisez un CDN en amont. Cela libère instantanément les ressources pour les nouveaux visiteurs.</p>
</li>
</ul>
<h3 data-path-to-node="20">Activer la compression Gzip / Brotli</h3>
<p data-path-to-node="21">Compresser le texte (HTML, CSS, JS) avant de l&#8217;envoyer réduit drastiquement l&#8217;utilisation de la bande passante et accélère le temps de réponse (TTFB).</p>
<div class="code-block ng-tns-c953698785-129 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjL6efYhp6VAxUAAAAAHQAAAAAQ_gY">
<div class="formatted-code-block-internal-container ng-tns-c953698785-129">
<div class="animated-opacity ng-tns-c953698785-129">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c953698785-129 ng-star-inserted">
<p><span class="ng-tns-c953698785-129">Nginx</span></p>
<div class="buttons ng-tns-c953698785-129 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c953698785-129"><code class="code-container formatted ng-tns-c953698785-129" role="text" data-test-id="code-content"><span class="hljs-comment"># Exemple Nginx</span>
<span class="hljs-attribute">gzip</span> <span class="hljs-literal">on</span>;
<span class="hljs-attribute">gzip_types</span> text/plain text/css application/json application/javascript text/xml;
<span class="hljs-attribute">gzip_comp_level</span> <span class="hljs-number">5</span>; <span class="hljs-comment"># Bon compromis entre réduction de taille et utilisation du CPU</span>
</code></pre>
</div>
</div>
</div>
<h3 data-path-to-node="23">Le Tuning Système (OS) au niveau de Linux</h3>
<p data-path-to-node="24">Souvent négligé, le système d&#8217;exploitation Linux limite par défaut le nombre de fichiers qu&#8217;un processus peut ouvrir simultanément (généralement 1024). Pour un trafic de masse, chaque connexion est un fichier ouvert.</p>
<p data-path-to-node="25">Modifiez <code data-path-to-node="25" data-index-in-node="9">/etc/security/limits.conf</code> pour augmenter les limites de l&#8217;utilisateur de votre serveur web (<code data-path-to-node="25" data-index-in-node="101">www-data</code> ou <code data-path-to-node="25" data-index-in-node="113">nginx</code>) :</p>
<div class="code-block ng-tns-c953698785-130 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjL6efYhp6VAxUAAAAAHQAAAAAQ_wY">
<div class="formatted-code-block-internal-container ng-tns-c953698785-130">
<div class="animated-opacity ng-tns-c953698785-130">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c953698785-130 ng-star-inserted">
<p><span class="ng-tns-c953698785-130">Plaintext</span></p>
<div class="buttons ng-tns-c953698785-130 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c953698785-130"><code class="code-container formatted ng-tns-c953698785-130" role="text" data-test-id="code-content">www-data soft nofile 65536
www-data hard nofile 65536
</code></pre>
</div>
</div>
</div>
<blockquote data-path-to-node="28">
<p data-path-to-node="28,0"><b data-path-to-node="28,0" data-index-in-node="0">Règle d&#8217;or :</b> Après chaque modification, testez toujours la configuration (<code data-path-to-node="28,0" data-index-in-node="74">nginx -t</code> ou <code data-path-to-node="28,0" data-index-in-node="86">apachectl configtest</code>) avant de redémarrer le service, et validez la tenue de charge avec un outil de stress-test comme <b data-path-to-node="28,0" data-index-in-node="205">ApacheBench (ab)</b> ou <b data-path-to-node="28,0" data-index-in-node="225">k6</b>.</p>
</blockquote><p>The post <a href="https://demarcq.net/optimiser-serveur-web">Comment optimiser la configuration de votre serveur web (Apache / Nginx) pour le trafic de masse ?</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Migrer son site web vers un nouveau serveur sans coupure</title>
		<link>https://demarcq.net/migrer-son-site-web</link>
		
		<dc:creator><![CDATA[demarcq]]></dc:creator>
		<pubDate>Mon, 29 Jun 2026 21:10:35 +0000</pubDate>
				<category><![CDATA[infogerance]]></category>
		<guid isPermaLink="false">https://demarcq.net/?p=9185</guid>

					<description><![CDATA[<p>Changer d’hébergement web est une étape clé pour accompagner la croissance d’un site. Pourtant, la peur du downtime (interruption de service) et de la perte de chiffre d&#8217;affaires paralyse de nombreux professionnels. Rassurez-vous : réaliser une migration transparente et sans coupure est tout à fait possible. Voici la méthodologie rigoureuse pour y parvenir. Étape 1 [&#8230;]</p>
<p>The post <a href="https://demarcq.net/migrer-son-site-web">Migrer son site web vers un nouveau serveur sans coupure</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></description>
										<content:encoded><![CDATA[<p data-path-to-node="3">Changer d’hébergement web est une étape clé pour accompagner la croissance d’un site. Pourtant, la peur du <i data-path-to-node="3" data-index-in-node="107">downtime</i> (interruption de service) et de la perte de chiffre d&#8217;affaires paralyse de nombreux professionnels. Rassurez-vous : réaliser une <b data-path-to-node="3" data-index-in-node="245">migration transparente et sans coupure</b> est tout à fait possible. Voici la méthodologie rigoureuse pour y parvenir.</p>
<h3 data-path-to-node="4">Étape 1 : Anticiper en réduisant le TTL des DNS</h3>
<p data-path-to-node="5">C&#8217;est le secret d&#8217;une bascule réussie. Quelques jours avant l&#8217;opération, connectez-vous chez votre registraire de domaine et abaissez le <b data-path-to-node="5" data-index-in-node="137">TTL (Time To Live)</b> de votre zone DNS à une valeur minimale (par exemple, 300 secondes). Cela force les fournisseurs d&#8217;accès à mettre à jour l&#8217;adresse de votre site toutes les 5 minutes au lieu de toutes les 24 heures, garantissant une propagation ultra-rapide le jour J.</p>
<h3 data-path-to-node="6">Étape 2 : Préparer le nouveau serveur et synchroniser les données</h3>
<p data-path-to-node="7">Déployez l&#8217;environnement technique sur le nouveau serveur (fichiers, bases de données, certificats SSL). Testez le site en local via votre fichier <code data-path-to-node="7" data-index-in-node="147">hosts</code> pour valider que tout fonctionne. Une fois prêt, effectuez une <b data-path-to-node="7" data-index-in-node="216">première synchronisation des données</b>. Juste avant la bascule DNS, passez temporairement le site d&#8217;origine en mode maintenance pour figer les données (commandes, commentaires), puis réalisez une synchronisation finale (via <code data-path-to-node="7" data-index-in-node="438">rsync</code> pour les fichiers et un export de la base de données).</p>
<h3 data-path-to-node="8">Étape 3 : Modifier le pointage DNS et observer la bascule</h3>
<p data-path-to-node="9">Modifiez l&#8217;adresse IP de vos enregistrements A (et AAAA) pour pointer vers le nouveau serveur. Grâce au TTL réduit précédemment, les visiteurs vont basculer de manière invisible et progressive vers la nouvelle infrastructure informatique.</p>
<h3 data-path-to-node="10">Étape 4 : Le nettoyage après migration</h3>
<p data-path-to-node="11">Une fois la propagation DNS totalement finalisée partout dans le monde (comptez 24 à 48 heures par sécurité), vous pourrez remonter le TTL à sa valeur d&#8217;origine (86400 secondes) et résilier sereinement votre ancien abonnement. Une migration sans coupure ne s&#8217;improvise pas, elle se planifie !</p><p>The post <a href="https://demarcq.net/migrer-son-site-web">Migrer son site web vers un nouveau serveur sans coupure</a> first appeared on <a href="https://demarcq.net">DEMARCQ.NET</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
