Table des matières
- 2026:
- 2025:
4 billet(s) pour septembre 2026
| Notes HTTP Strict Transport Security - HSTS | 2026/09/18 11:04 | Jean-Baptiste |
| Notes GNU Linux GPU carte graphiques | 2026/09/08 15:49 | Jean-Baptiste |
| Notes GNU Linux graphique | 2026/09/08 15:42 | Jean-Baptiste |
| Notes urlencoding - passer des mots de passe en HTTPS | 2026/09/03 17:58 | Jean-Baptiste |
Mise a jour automatique - auto update - gnu linux debian redhat
Debian
apt install unattended-upgrades dpkg-reconfigure -plow unattended-upgrades
Fedora 22 or later
dnf install dnf-automatic
/etc/dnf/automatic.conf
apply_updates = yes
systemctl enable dnf-automatic.timer
systemctl start dnf-automatic.timer
RedHat
yum install yum-cron
/etc/yum/yum-cron.conf
apply_updates = yes
systemctl start yum-cron.service
Migration DB MySQL / MariaDB
Serveur Source
mysqldump mydb -u myuser -pP@ssw0rd |pigz > /var/mydb.sql.gz
mysql> SELECT user,host,password FROM mysql.user WHERE user='myuser'; +------------------+-----------+-------------------------------------------+ | user | host | password | +------------------+-----------+-------------------------------------------+ | myuser | localhost | *FFCB02F67B3F444B093A3A20CB5CB10481C0807C | +------------------+-----------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> SHOW GRANTS FOR 'myuser'@'localhost'; +--------------------------------------------------------------------------------------------------------------+ | Grants for myuser@localhost | +--------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'myuser'@'localhost' IDENTIFIED BY PASSWORD '*FFCB02F67B3F444B093A3A20CB5CB10481C0807C'| | GRANT ALL PRIVILEGES ON `mydb`.* TO 'myuser'@'localhost' | +--------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
Voir également
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER;
Serveur Destination
CREATE DATABASE mydb; -- CREATE USER 'myuser'@'localhost' IDENTIFIED BY PASSWORD '*FFCB02F67B3F444B093A3A20CB5CB10481C0807C'; -- REVOKE ALL PRIVILEGES ON *.* FROM 'myuser'@'localhost'; GRANT USAGE ON *.* TO 'myuser'@'localhost' IDENTIFIED BY PASSWORD '*FFCB02F67B3F444B093A3A20CB5CB10481C0807C'; GRANT ALL PRIVILEGES ON `mydb`.* TO 'myuser'@'localhost'; -- FLUSH PRIVILEGES;
zcat /var/mydb.sql.gz |mysql -D mydb
Autres
SELECT USER,db FROM mysql.db
mysqldump mysql --tables user --where="user='myuser'" --skip-add-drop-table --skip-add-locks --no-create-info --replace --complete-insert
Mettre en place un serveur Jabber avec du TLS et du Forward Secrecy
Title: Mettre en place un serveur Jabber avec du TLS et du Forward Secrecy
Authors: skhaen
ZeroHeure, palm123, NeoX et Nÿco
Date: 2015-01-26T19:38:08+01:00
License: CC by-sa
Tags: tls, ssl, prosody, xmpp, jabber, serveur_jabber_tls et sécurité
Score: 45
URL: http://linuxfr.org/news/mettre-en-place-un-serveur-jabber-avec-du-tls-et-du-forward-secrecy
J'ai publié il y a quelques mois un tuto pour mettre en place “facilement” un serveur XMPP/Jabber avec Prosody et du SSL/TLS plutôt bien configuré sous Debian, j'ai eu pas mal de retours positifs depuis et je pense qu'il pourrait intéresser d'autres personnes.
Article original : https://www.libwalk.so/2014/02/14/installer-un-serveur-xmppjabber-avec-prosody.html
Installation
Pour installer Prosody sous Debian, il suffit de rajouter le dépôt dans son sources.list, on peut utiliser la ligne suivante pour le faire. Elle permet de simplifier énormément la manipulation (pour les détails, c'est ici http://prosody.im/download/) package_repository :
echo "deb http://packages.prosody.im/debian $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list
Puis on ajoute la clé GPG du dépôt :
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
On met à jour les dépôts, puis on installe Prosody :
aptitude update && aptitude install prosody
Le paquet lua-sec dans Debian est légèrement… ancien, si vous voulez les derniers algorithmes de chiffrement et que le Perfect Forward Secrecy soit pris en compte, il faut le mettre à jour.
Sur Debian Wheezy :
echo "deb http://ftp.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list aptitude update && aptitude -t wheezy-backports install lua-sec-prosody
Configuration
L'ensemble de la configuration se fait dans un seul fichier :
/etc/prosody/prosody.cfg.lua
La première partie est commune à l'ensemble des VirtualHosts que vous allez mettre en place. Ce qui sera écrit sous chaque VirtualHost “exemple.com” (en bas) sera propre à chaque VirtualHost.
Ce qui veut dire que si vous mettez votre configuration SSL dans la première partie, elle sera commune à tous les VirtualHosts. Faites attention aux répercussions que ça peut avoir
La première brique
Ouvrez le fichier avec votre éditeur préféré (pour moi ça sera vim)
vim /etc/prosody/prosody.cfg.lua
Il faut modifier/compléter les champs suivants http://prosody.im/doc/configure (avec évidemment vos informations à la place de example.tld) :
Qui est administrateur du serveur (tout en haut du fichier) ?
admins = {"admin@exemple.tld"}
Voulez-vous autoriser les inscriptions sur votre serveur ? À moins de savoir ce que vous faites, je vous conseille grandement de le mettre sur false afin d'éviter de servir aux spammeurs et aux bots.
allow_registration = false;
Quel domaine voulez-vous utiliser (tout en bas du fichier) ? N'oubliez pas de changer example.tld pour votre domaine.
VirtualHost "example.tld" enabled = true
Les logs
C'est très important (et déjà partiellement configuré). Ils permettent de trouver où est le problème quand ça ne marche pas (pour plus de détails sur la configuration : logging, la modification par rapport au fichier original consiste à mettre le prosody.log en warn et non plus en info et à faire la même manipulation pour le syslog :
log = {
warn= "/var/log/prosody/prosody.log";
error = "/var/log/prosody/prosody.err";
{ levels = { "error" }; to = "syslog"; };
Si vous avez un problème à régler, je vous conseille de rechanger le premier warn pour debug, puis de redémarrer prosody (via la commande prosodyctl restart), vous aurez alors toutes les informations qu'il vous faut dans /var/log/prosody/prosody.log et bien plus encore pour trouver d'où ça vient.
Un minimum de sécurité
De base, Prosody enregistre les mots de passe des comptes en clair sur le serveur, pour qu'ils soient hashés, il faut modifier la ligne authentication = "internal_plain" par la ligne suivante :
authentication = "internal_hashed"
prosodyctl
Prosody vient avec une commande qui aide à communiquer avec lui facilement : prosodyctl, et qui s'utilise sous la forme suivante :
prosodyctl COMMAND [OPTIONS]
Où COMMAND peut être :
adduser- exemple@exemple.tld - crée le compte utilisateurpasswd- exemple@exemple.tld - configure le password de l'utilisateurdeluser- exemple@exemple.tld - supprime l'utilisateurstart- démarre Prosodystop- arrête Prosodyrestart- redémarre Prosodyreload- recharge la configuration de Prosodystatus- indique le status actuel de Prosody
Plutôt utile non ? :]
Nous allons ajouter un utilisateur (il vous demandera un mot de passe), puis nous rechargerons la configuration pour prendre en compte les changements (exemple.tld doit être le même que vous avez mis pour votre VirtualHost) :
prosodyctl adduser exemple@exemple.tld
prosodyctl reload
Et là, c'est l'instant de plaisir, si vous essayez de vous connecter avec un client jabber (comme pidgin), ça devrait se connecter. Si ce n'est pas le cas (faire dans l'ordre) :
- voir les logs de prosody,
- voir les logs de votre client jabber,
- changer les logs de prosody de info à debug,
- boire un thé (ou une bière)
- vérifier votre firewall,
- rebrancher la box,
- reprendre un thé,
- changer de FAI.
Les modules
Comme vous pouvez le voir dans le fichier de configuration, il y a déjà un certain nombre de modules qui sont activés par défaut (roster, saslauth, tls, posix…). ils sont dans la partie modules_enabled = { }.
Si je vous parle de ça, vous vous doutez que ce n'est pas pour rien, il existe beaucoup de modules, dont un pour Tor :
- liste des modules : core modules,
- liste des modules tiers : prosody-modules
- mod_onions : XMPP Federation Over Tor Hidden Services
Chiffrons tout pour tout le monde
Manifesto - A public statement about ubiquitous encryption on the XMPP network.
Si vous ne connaissez pas (ou mal) le SSL/TLS, je ne peux que vous conseiller d'attaquer le sujet par la conférence de Benjamin Sonntag dans le cadre du cycle de conférence « <http://iletaitunefoisinternet.fr|Il était une fois Internet> ».
Création du certificat
Si votre certificat n'est pas reconnu « valide » par votre client jabber, par exemple en cas de certificat auto-signé, il demandera autorisation pour l'utiliser.
La méthode simple (et vraiment rapide)
La méthode « simple » consiste à la création d'un certificat auto-signé avec l'aide de prosodyctl :
# exemple.tld étant le domaine que vous avez mis dans prosody.cfg.lua prosodyctl cert generate exemple.tld
- vérifier l'emplacement des certificats une fois qu'ils sont générés
- vous pouvez les bouger dans /etc/prosody/certs/ si vous avez envie (on part du principe que c'est le cas pour la suite)
- N'oubliez pas les deux lignes suivantes :
chmod 600 /etc/prosody/certs/exemple.tld.key chown prosody:prosody /etc/prosody/certs/exemple.tld.key chown prosody:prosody /etc/prosody/certs/exemple.tld.crt
Pour aller plus loin :
- Prosody - certificats,
- Prosody - configuration SSL avancé
La méthode un peu moins simple mais qui est vachement mieux
Nous allons créer ce dont nous avons besoin en faisant une requête à http://www.startssl.com/ :
openssl req -sha256 -out /etc/prosody/certs/exemple.csr -new -newkey rsa:2048 -nodes -keyout /etc/prosody/certs/exemple.key
Cette commande génère (openssl req -out) une CSR (-new) ainsi qu'une nouvelle clé RSA de 2048 bits (-newkey rsa:2048) qui ne sera pas chiffrée (-nodes). Si vous voulez encore plus de détails, c'est sur openssl.org.
Je vous laisse sur startssl.com réaliser les différentes étapes pour s'inscrire (bonne chance !), il faut choisir la première formule (celle qui est gratuite). Après la création de votre compte, la validation de votre nom de domaine, etc. etc. nous pouvons passer à la suite.
- Après votre authentification sur le site, cherchez l'onglet « Certificates Wizard » qui se trouve normalement vers la gauche de votre écran,
- il vous demande alors pourquoi vous voulez un certificat (“Select Certificate Purpose”), vous choisissez donc XMPP (jabber) SSL/TLS certificate,
- le site vous demande de créer une clé privée (“Generate Private Key”) : VOUS NE LE FAITES PAS !, vous appuyez au contraire sur skip (nous avons créé la clé privée quelques lignes au dessus),
- vous arrivez maintenant sur la page de demande de certificat (“Submit Certificate Request (CSR)”), toujours dans un terminal, vous devez taper la commande suivante :
cat /etc/prosody/certs/exemple.csr
Cette commande vous donnera un résultat qui devrait ressembler à
-----BEGIN CERTIFICATE REQUEST----- MIIChjCCAW4CAQAwQTELMAkGA1UEBhMCRlIxCzAJBgNVBAgMAkZSMQswCQYDVQQH DAJGUjELMAkGA1UECgwCRlIxCzAJBgNVBAsMAkZSMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAsoJcj6/bwl9naKG9C9seKt4HjBicV5o96zqoO0YxtJAe X9k2t4KTp0CrzQ85c9DfggY8oAMq/DX/xRFL0cPxamxSwwW5ttVoBQ04wBWDhjEo a2ixpe5UMmfakuY3Q56HsIbhh7Vo4RZS1OtPOv7E2J0CfDVUhrNCpDjZbtM8akTE 9P86BkXdroJgU8tfwONMFDBF2K8ElhN6mqftb89KGIUpgm1fcDq8woRpnFER7A3H OwfCfnlkLrtMWVca1smEWnlutBKw6cgk6uSMK9V9/Y44wMKZHoOrOQE0R26+MGrA MLhprqPaANIvhamq+tSsSASYZDeajDS3R1JWX188awIDAQABoAAwDQYJKoZIhvcN AQEFBQADggEBAHYSpBxHhRP87qmWNqp9Sf8dYz3oQfJLA2cLpQV2MOIfFW0mmOyz JG6TVISKVmiEHZtHqgW4TL3BSKBAWENBM8mjAjmxXCmy2MBSWBVhDVaGz4w+x3hO UMtNMubYxkkc/xgX5vwbuReH6y1sbkMUQm1UETb6Fnmm8dyDzwPI0zV+NdzUqqhI ARjMM2RrwPH7QZ2lSAOiB/X+fXKhwMSg0qUExYiln20JKBi6f58GdyOu6Hp/Fi+m r8xnIcnZ2ZIIyjh4B2bfAfybTOWHHRtOaI9yH8pTP3HnKqgbtxZJYqioTAAAQxjQ hFmXThFFrfhTDnqJ0Fc+bjcoiLoy46FtLz8= -----END CERTIFICATE REQUEST-----
Copiez-le dans la fenêtre en bas (de -----BEGIN CERTIFICATE REQUEST----- à -----END CERTIFICATE REQUEST----- !). Vous aurez alors votre certificat peu de temps après, transférez-le sur votre serveur, dans /etc/prosody/certs/ avec comme nom « exemple.tld.crt ».
Création d'un certificat chaîné
Pour créer un certificat chaîné, faites la manipulation suivante (startssl.com vous donne les liens vers ces deux certificats juste au dessus du bouton finish »» de la page Save Certificate) :
- télécharger le certificat intermédiaire de startssl :
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
- puis le certificat root :
wget https://www.startssl.com/certs/ca.pem
- puis on forge le certificat chaîné (ne pas oublier les 2
>>) :
cat sub.class1.server.ca.pem >> /etc/prosody/certs/exemple.tld.crt cat ca.pem >> /etc/prosody/certs/exemple.tld.crt
Génération du dhparam
Création du dhparam prosody.im/dhparam :
openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048
Java ne peut pas utiliser un dhparam supérieur à 1024 bits, ce qui empêche d'utiliser par exemple le logiciel Jitsi. Pour éviter cela (c'est tout de même un client grandement utilisé), on peut générer un dhparam de 1024 bits avec la commande suivante (ne pas oublier de modifier la configuration pour remplacer dh-2048.pem par dh-1024.pem) :
openssl dhparam -out /etc/prosody/certs/dh-1024.pem 1024
Configuration du SSL/TLS
On retourne dans /etc/prosody/prosody.cfg.lua :
/etc/prosody/prosody.cfg.lua
ssl = {
key = "/var/lib/prosody/exemple.tld.key";
certificate = "/var/lib/prosody/exemple.tld.cert";
dhparam = "/etc/prosody/certs/dh-2048.pem";
options = { "no_sslv2", "no_sslv3", "no_ticket", "no_compression",
"cipher_server_preference", "single_dh_use",
"single_ecdh_use" };
ciphers = "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
}
- c2s signifie « Client TO Server »,
- s2s signifie « Server TO Server ».
c2s_ports = { 5222 } s2s_ports = { 5269 } c2s_require_encryption = true s2s_require_encryption = true s2s_secure_auth = false allow_unencrypted_plain_auth = false;
s2s_secure_auth est sur false pour les raisons suivantes (TL;DR: possibilité de certificat auto-signé en face). Peut marcher avec s2s_auth_fingerprint mais c'est douloureux.
Les options s2s_secure_domains et s2s_insecure_domains peuvent aussi vous intéresser, surtout si vous voulez parler avec des personnes qui sont sur gmail (ce qui veut dire que ça ne sera pas chiffré).
Concernant la ciphersuite, le choix par défaut de Prosody est déjà pas mal :
ciphers = "HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL";
Il faut tout de même enlever RC4 et eNULL, et tant qu'à faire, autant faire une liste de ciphers avec seulement du PFS Perfect Forward Secrecy (c'est à mettre dans le bloc ssl { }) :
ciphers = "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
DNS
N'oubliez pas d'ajouter les enregistrements SRV dans vos DNS :
_xmpp-client._tcp.jabber IN SRV 0 5 5222 host.exemple.com. _xmpp-server._tcp.jabber IN SRV 0 5 5269 host.exemple.com.
Firewall
En cas de firewall, il faut ouvrir les ports 5269 et 5222 (IN et OUT) en TCP. La configuration pour iptables donne ceci :
iptables -I INPUT -p tcp --dport 5269 -j ACCEPT iptables -I OUTPUT -p tcp --sport 5269 -j ACCEPT iptables -I INPUT -p tcp --dport 5222 -j ACCEPT iptables -I OUTPUT -p tcp --sport 5222 -j ACCEPT
Test
Comme SSLLabs ou TestSSL.sh pour tester le SSL/TLS sur les serveurs webs, il existe xmpp.net pour les serveurs XMPP. Je vous conseille vivement de tester votre site !
Il faut toujours vérifier, même quand on pense pouvoir avoir confiance.
Si vous vous demandez comment améliorer votre note, c'est là : xmpp.net/about.
Source : http://linuxfr.org/news/mettre-en-place-un-serveur-jabber-avec-du-tls-et-du-forward-secrecy
Mes paquets Debian modifies
Paquet Debian à faire :
- vlock Hack
- WDFS : Création, car n'existe pas encore en paquet Debian
- Gostcrypt Ré-inclure le binaire gostcrypt_debian_7.4_amd64 (Correction bug Error: No such file or directory)
- Création paquet gut ?
A ajouter dans le dépôt :
- atop netatop
- signify-openbsd
- Mondo
- afio ?
- Brackets
- ddrescueview
Voir https://www.deb-multimedia.org/pool/main/
Liste de paquets modifié, construit ou téléchargé perso :
- atop_2.2.3-1+jb1_amd64.deb
- atop-netatop-dkms_0.7-1+jb2_all.deb
- brackets.release.1.6.64-bit.deb
- ddrescueview_0.4~alpha2-1_amd64.deb
- gostcrypt_1.3-1~jb1.deb
- libdvdcss2_1.2.13-0_amd64.deb
- libmondorescue-perl_3.2.2-1_all.deb
- libprojectbuilder-perl_0.13.2-1_all.deb
- libqt3-mt_3.3.8b-7+b1~jb1_amd64.deb
- mindi_3.0.2-1_amd64.deb
- mindi-busybox_1.21.1-1_amd64.deb
- mondo_3.2.2-1_amd64.deb
- pdfedit_0.4.5-1_amd64.deb
- qarte_2.8.0-0ubuntu1_all.deb
- vlock_2.2.2-5+jb1_amd64.deb
- wdfs_1.4.2-1+jb-1_amd64.deb
vlock
Brouillons
wget http://ftp.fr.debian.org/debian/pool/main/v/vlock/vlock_2.2.2-3_amd64.deb apt-get download vlock for FIC in *.deb do mkdir ${FIC/.deb/} cd ${FIC/.deb/} ar x ../$FIC tar xf data.tar.* --same-owner cd - done #rm *.deb cp -p vlock_2.2.2-3_amd64/usr/lib/vlock/modules/new.so vlock_2.2.2-5_amd64/usr/lib/vlock/modules/ #cp -p vlock_2.2.2-3_amd64/DEBIAN/postinst vlock_2.2.2-5_amd64/DEBIAN/postinst chmod +x vlock_2.2.2-5_amd64/usr/lib/vlock/modules/new.so rm -f vlock_2.2.2-5_amd64/data.tar.* cd vlock_2.2.2-5_amd64 mkdir DEBIAN mv debian-binary DEBIAN/ cd DEBIAN/ tar --same-owner xf ../control.tar.gz rm -f ../control.tar.gz cd .. sed -i -e 's/^Version: \(.*\)$/Version: \1~jb1/' DEBIAN/control md5sum $(find . -not -wholename "./DEBIAN/*" -type f -not -name "debian-binary" )> DEBIAN/md5sums cd .. dpkg-deb --build vlock_2.2.2-5_amd64/
Note pour Redhat/CentOS
- bwm-ng
Mémoire Linux
Voir :
- /proc/sys/vm/compact_memory
- procmap
- pmap
- lsmem / chmem
- slabtop
- memstrack
- smem - memory reporting tool
- smemcap - data collection tool for memory reporting
- smemstat - memory usage monitoring tool
- SLAB / SLUB / SLOB
Linux Memory Management :
Exemples :
Fuite mémoire
Voir :
- Valgrind
- https://github.com/iovisor/bcc/blob/master/README.md tools/memleak
Config
Kernel Linux param
NUMA (Non-Uniform Memory Access)
Voir :
numatop
Disable NUMA (Pour Oracle DB) /usr/share/doc/kernel-doc-4.18.0/Documentation/x86/x86_64/boot-options.txt
numa=off Only set up a single NUMA node spanning all memory.
Vérif
numactl command can be used to check the status of NUMA
# numactl -H | grep available available: 8 nodes (0-7)
# numactl -H | grep available available: 2 nodes (0-1)
If the number of available nodes is 2 nodes (0-1) or 8 nodes (0-7) then NUMA is enabled
If the number of available nodes is 1 nodes (0) then NUMA is not enabled.
Voir aussi :
- numastat
- numademo
NUMA (Non-Uniform Memory Access) - Useful Commands
To identify NUMA nodes, socket memory and CPU core allocation
numactl -H
To identify the NUMA node local to an adapter
cat /sys/class/net/<interface>/device/numa_node
To identify memory allocation and use on a particular NUMA node:
cat /sys/devices/system/node/node<N>/numastat
To identify NUMA node mapping to cores, use one of the following
numactl --hardware cat /sys/devices/system/node/node<N>/cpulist
Driver Loading - NUMA Node
numactl --cpunodebind=1 onload_tool reload
Memory usage per user
smem -u
Transparent HugePages (THP)
Voir
Désactiver **Transparent HugePages (THP)**
cat /sys/kernel/mm/transparent_hugepage/enabled
The following is a sample output that shows Transparent HugePages are being used as the [always] flag is enabled.
[always] never
Paramètre Kernel Linux
transparent_hugepage=never
Notes Free / Aviable
$ ./centreon_plugins.pl --plugin os::linux::snmp::plugin --mode memory --hostname localhost --help
...
--patch-redhat
If using Red Hat distribution with net-snmp >= 5.7.2-43 and
net-snmp < 5.7.2-47. But you should update net-snmp!!!!
This version: used = memTotalReal - memAvailReal // free =
memAvailReal
Others versions: used = memTotalReal - memAvailReal - memBuffer
- memCached // free = total - used
Exemple
Voir psacct Suivre la conso CPU par utilisateurs
free -mt ps aux --sort=-%mem | head -n 11 vmstat -SM 45 10 vmstat -SM -a 45 10 ps -C apache2 -o rss --no-headers | tr "\n" "+" | sed -e 's/+$/\n/' | bc ps -e -o pid,user,%mem,rss,vsize,cmd --sort rss ps -e -o pid,user,%mem,rss,vsize,cmd --sort vsize ps -u $USER -o comm,vsz,pcpu | sort -nrk2 ps -eo comm,pcpu,pmem,rss --sort rss | tail -n 30 | tac
read CommitLimit Committed_AS <<< $(egrep "CommitLimit|Committed_AS" /proc/meminfo | awk '{print $2}') echo $(( Committed_AS * 100 / CommitLimit))
memused=$(free | grep "buffers/cache" | awk '{print $3}') memtotal=$(free | grep ^Mem | awk '{print $2}') echo $(( memused * 100 / memtotal))
memFree=$(free | grep ^- | awk '{print $3}') memTot=$(free | grep ^Mem | awk '{print $2}') memUsed=$(echo "scale=2 ; 100 * $memFree / $memTot" | bc) echo "$memUsed % Mem used" | grep ^[3-9][0-9]
ps -C apache2 -o rss --no-headers | tr "\n" "+" | sed -e 's/+$/\n/' | bc read CommitLimit Committed_AS <<< $(egrep "CommitLimit|Committed_AS" /proc/meminfo | awk '{print $2}') echo $(( Committed_AS * 100 / CommitLimit)) memused=$(free | grep "buffers/cache" | awk '{print $3}') memtotal=$(free | grep ^Mem | awk '{print $2}') echo $(( memused * 100 / memtotal)) ps -e -o pid,user,rss,vsize,cmd --sort rss
smem -u smem -u -t -k top -b -n 1 -u apache
Taille totale de la mémoire physique de la RAM (sans la swap)
# head -1 /proc/meminfo
MemTotal: 65391036 kB
# awk '/MemTotal/ { print $2 }' /proc/meminfo
65391036
Fonctionnement
Voir : OOM Killer et Overcommit Memory http://www.blog.florian-bogey.fr/empecher-les-depassements-de-memoire-sur-un-serveur-linux.html
Autres
Clearing KernelCare Cache
Source : https://www.linuxjournal.com/content/how-install-and-uninstall-kernelcare
rm -rf /var/cache/kcare/patches echo 1 > /proc/sys/vm/compact_memory echo 3 > /proc/sys/vm/drop_caches kcarectl –update
- https://www.postgresql.org/docs/current/kernel-resources.html Overcommit Memory Overcommit Accounting
Voir :
vm.overcommit_memory=0 Default Heuristic overcommit handling
vm.overcommit_memory=1 Always overcommit. Appropriate for some scientific applications. Classic example is code using sparse arrays and just relying on the virtual memory consisting almost entirely of zero pages.
vm.overcommit_memory=2 Strict setting vm.overcommit_memory=2 DOES allow overcommit. If you set overcommit_ratio to (say) 200, then memory can be committed to the extent of swap +(RAM * 200/100).
The current overcommit limit and amount committed are viewable in /proc/meminfo as CommitLimit and Committed_AS
A la place de overcommit_ratio Il est possible d'utiliser vm.overcommit_kbytes
OOM
echo -1000 > /proc/self/oom_score_adj cat /proc/<pid>/oom_score echo -1000 > /proc/<pid>/oom_score_adj # protect from OOM kill
Or in a specific cgroup, set oom_kill_disable to 1.
echo 1000 > /proc/<pid>/oom_score_adj # mark as first target
For systemd services, use OOMScoreAdjust=-1000 in the unit file to protect critical processes. cgroup_enable=memory swapaccount=1
$ echo $(($(cat /sys/fs/cgroup/memory/memory.max_usage_in_bytes) / 2**20)) MB 11389 MB $ cat /sys/fs/cgroup/memory/memory.stat
OOM is not invoked when memory.high is reached. However, if cgroup memory.max is reached then OOM is invoked. TLB hit TLB miss
sudo perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses -a sleep 60 perf list | grep -i tlb
Slub
slabtop --sort=1
slabinfo -v
access.redhat.com/ page_owner=on
Premature swapping while there is still plenty of pagecache to be reclaimed
Cgroup v1
