J'ai repris certains points comme les DNS de FDN, merci Seb.
En mettant la propriété :
# Pour Firefox :
browser.cache.disk.parent_directory="/tmp/cache/mozilla/firefox"
# Pour Thunderbird :
browser.cache.disk.parent_directory="/tmp/cache/mozilla/thunderbird"
Ne fonctionne que si /tmp est monté dans la ram biensûr !
Un article intéressant sur les "branch prediction" ou en d'autres termes, la fonctionnalité de prédiction du prochain calcul d'un micro-processeur. Ceci expliqué via une doc Java et C++ qui montrent qu'une liste triée permet de mieux prédire le prochain code et donc l'accès à l'information se fait plus vite.
Un super tuto expliquant le fonctionnement d'une JVM et toutes les manières de l'optimiser via du tuning :
Tout est dans le titre.
Comment définir la taille des blocs de vos partitions EXT4.
je cite :
Si vous utilisez la plupart du temps de gros fichiers, il sera probablement très profitable de formatter vos partitions avec des blocs de taille plus importante. En effet, Linux utilise par défaut des taille de blocs de 1024 octets. Vous pouvez changer avec des tailles de 4096 avec la commande mke2fs -b 4096 /dev/..., qui utilise des blocs de 4k au lieu de 1k. Cela va notamment réduire la fragmentation et réduire le temps de vérification lors d'un fsck.
Le lien propose toute une tripoté d'autres optimisations.
Un tuto d'optimisation des lectures écriture d'un OS installé sur clef usb
Ci-dessous se trouve mon /etc/fstab
$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdc1 during installation
UUID=0b59763b-4454-4705-aa57-761039f56cb0 / ext4 errors=remount-ro,discard,noatime,nodiratime 0 1
## Fichier tmp dans la RAM
tmpfs /tmp tmpfs defaults,noatime,nodiratime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nodiratime,mode=1777 0 0
## Pour les logs
tmpfs /var/log tmpfs defaults,noatime,nodiratime,mode=0755 0 0
Une courte intro sur les "profile" de Java 8. Je suis complètement passé à côté de la techno. A regarder pour améliorer les perfs
Un autre lien peut-être un peu plus clair sur les profiles : vitaflux
Un lien vers une doc NetBeans intégrant les Java 8 Compact profiles : Oracle NetBeans
Un autre lien vers la doc Oracle : Doc Oracle
Comment optimiser les performances avec SQLite
Supprimer la journalisation de ext4.
Les commandes à exécuter sur des partitions non montées (donc depuis une clef usb bootable par exemple) :
sudo tune2fs -O^has_journal /dev/sda3
sudo e2fsck -f -v -C0 /dev/sda3
Attention, désactiver la journalisation augmentera énormément les performances ainsi que la durée de vie de votre disque SSD. Mais en cas de coupure de courant, vous risquez une totale des données qui étaient en cours d'écriture.
Donc oui pour de la bureautique mais jamais ô grand jamais pour un serveur.
UNE VARIANTE ============================ CELA SIGNIFIE PAS LES DEUX EN MÊME TEMPS !
Une variante consiste à utiliser un autre mode de journalisation (par défaut il y en a trois). Cela se passe dans la fstab :
/dev/sda2 / ext4 noatime,defaults,data=writeback 0 1
Il faut ajouter l'option data=writeback et redémarrer.
Quand vous faites un HTOP, vous voyez souvent la consommation de NetBeans dépasser les 16Go de mémoire alors que votre système en a moins que ça. Cela est du à la GLIBC et sa manière de gérer la pagination avec les applications multi-thread.
En gros le calcul est le suivant :
Seuil mémoire de la JVM x taille d'un long sur votre architecture x nb coeurs...
- De base une JVM est à 64 Mo et en général 512 Mo pour NetBeans
- La taille d'un long sur un processeur 64 bits c'est 8 octets
- Le nombre de coeur, ici 8.
ME concernant la mémoire virtuel est donc à 512 Mo x 8 x 8 = 32768 Go... Voilà voilà.
Alors pour corriger le tire est améliorer A MORT ses perfs il faut ajouter dans votre fichier .profile :
export MALLOC_ARENA_MAX=4
N.B : où dans le script qui lance netbeans ça marche aussi si vous en avez un.
Cela va diviser la mémoire virtuel en général par 2 voir par 4. On dit merci qui ?
Pimper son Linux avec tout un tas d'optimisation sympa. Il faudra que je tienne une liste résumant tout ceci un jour (ou un script).
Comment supprimer l'écriture de log du kernel sous linux (pratique pour les OS sur clefs USB).
En résumé pour System V :
/etc/init.d/syslogd stop
Pour UpStart :
sudo service rsyslog stop
sudo systemctl disable syslog
sudo systemctl disable rsyslog
Des optimisations à faire pour les disques SSD sur lesquels tournent linux. Les améliorations sont classiques : durée de vie, performance, consommation, etc
Linux a tendance à swapper dès que la RAM est consommée à plus de 40%. Une bonne façon de forcer Linux à consommer au moins 15 Go de RAM sur 16 Go est de changer la swappiness, c'est-à-dire la tendance du système à swapper.
En résumer il faut :
1) Ouvrir le fichier /etc/sysctl.conf
2) Ajouter / Modifier ceci :
Edit : L'explication à regarder ICI trouvée sur le site de RedHat qui doit être meilleure que la mienne :
## vm.swappiness : désactive le fichier d’échange (swap)
## Que signifie le "1" ? Que Linux commencera à swapper lorsqu'il vous restera moins de 1% de RAM libre. Voilà.
vm.swappiness = 1
## vm.laptop_mode : Secondes après une lecture des fichiers modifiés
vm.laptop_mode = 0
## vm.dirty_writeback_centisecs : Quand le noyau doit vérifier si des données modifiées sont à écrire sur le disque
## Ici toutes les deux minutes
vm.dirty_writeback_centisecs = 12000
## vm.dirty_expire_centisecs : Quand le noyau estime que les anciennes données doivent-être écrites sur le disque
## Ici toutes les deux minutes
vm.dirty_expire_centisecs = 12000
## vm.vm.dirty_ratio : quantité maximale de mémoire (en pourcentage) à utiliser pour stocker les données modifiées
## Ici toutes les deux minutes
vm.dirty_ratio = 10
## vm.dirty_background_ratio : quantité minimale de mémoire (en pourcentage) à utiliser pour stocker les données modifiées
vm.dirty_background_ratio = 1
## vm.vfs_cache_pressure : la tendance qu'aura l'OS à faire revenir les données swappée dans la RAM (je ne sais pas s'il s'agit d'une constante ou d'une probabilité)
vm.vfs_cache_pressure=50
Un article parlant des mécanismes d'optimisation de la JVM. Je me le garde sous le coude pour plus tard
Comment pimper sa Linux Mint en quelques copier-coller. Merci à Timo !
LibreOffice 5 est sortie est l'accent est mis depuis la version 4 sur l'amélioration internet (stabilité, performance, interopérabilité).
Un résumé de ce qui a été fait !
Vous codez en PHP et souhaitez produire un code plus rapide. Voici plus de 50 astuces répertoriées.
Très sympa de la part de l'auteur, ce genre d'initiative existe aussi en Java et encore plus en JavaScript !
Je copie-colle les 50 règles au cas où :
Les 50+ commandements en PHP
Ces commandements sont une traduction du billet de chez HM2K que j'ai jugé très intéressant et que je souhaite faire partager aux développeurs non anglophones.
echo est plus rapide que print. [Citation]
Mettre ses chaines de caractères entre simple quotes '...' est plus rapide qu'entre des doubles quotes "..." car PHP analyse s'il y'a des variables entre les doubles quotes. Utiliser les simple quote pour du texte pur.
Utiliser sprintf au lieu de mettre des variables dans des double quotes, C'est 10x plus rapide. [Citation]
Utiliser les paramètres multiples dans un echo au lieu de la concaténation des chaines. [Citation]
Utiliser le plus possible des variables pour les calculs, éviter de les mettre dans les boucles. Exemple
1.
<a onclick="window.open(this.href); return false;" href="http://www.php.net/for">for</a> ($x=0; $x < count($array); $x)
La fonction count est appelée à chaque boucle, mieux vaut utiliser $max=count($array) pour stocker le résultat du calcul avant la boucle. [Citation]
Pensez à unset ou rendre null vos variables, en particulier les gros tableaux. [Citation]
Eviter les méthodes magiques comme __get, __set, __autoload. [Citation]
Utiliser require() au lieu de require_once() quand c'est possible. [Citation]
Utilisez desz chemins complets dans vos include et require. C'est du temps gagné pour la résolution du chemin au niveau de votre OS. [Citation]
require() et include() sont identiques à part que require arrete le script si le fichier n'est pas trouvé. Les performances sont quasi identiques. [Citation]
Depuis PHP5, l'heure de démarrage d'un script peut être trouvé grâce à $_SERVER[’REQUEST_TIME’], à utiliser à la place de time() ou microtime(). [Citation]
PCRE regex est plus rapide que EREG, mais il faut toujours regarder s'il n'est pas posssible d'utiliser une fonction native comme strncasecmp, strpbrk et stripos à la place. [Citation]
Quand vous parsez du XML en PHP essayez xml2array, qui permet d'utiliser les fonctions PHP XML, pour du HTML vous pouvez essayer DOM document ou DOM XML en PHP4. [Citation]
str_replace est plus rapide que preg_replace, str_replace est globalement le meilleur dans tous les cas, même si quelques fois strtr est plus rapide avec des chaines longues. Utiliser un array() dans str_replace est plus rapide que d'utiliser plusieurs str_replace. [Citation]
“else if” est plus rapide qu'un case/switch. [Citation]
La suppression d'erreurs avec @ est très lent. [Citation]
Pour réduire l'utilisation de la bande passante, il faut activer le mode mod_deflate dans Apache2 [Citation] ou mod_gzip pour Apache1. [Citation]
Fermer les connexions aux BDD après les avoir utilisé. [Citation]
$row[’id’] est 7 fois plus rapide que $row[id], car si vous ne mettez pas les quotes, PHP Pense qu'il va s'agir d'une constante. [Citation]
L'utilisation de tags d'un autre style ou des shorts tags pour ouvrir du code PHP est déconseillé. [Citation]
L'utilisation d'un code strict permettant de supprimer toutes les erreurs, warning etc est conseillé. error_reporting(E_ALL) doit toujours être activé. [Citation]
Les scripts PHP sont rendus 2 à 10 fois moins rapidement par Apache qu'une page statique. Essayez d'utiliser au maximum des pages statiques. [Citation]
Les scripts PHP sont compilés à la volée (si pas de cache). Installez un système de cache PHP (comme memcached, eAccelerator ou Turck MMCache) permet d'augmenter de 25-100% les performances. [Citation]
Une alternative aux systèmes de cache est de générer régulièrement le rendu en HTML statique. Essayez Smarty ou Cache Lite. [Citation]
Utilisez isset où c'est possible au lieu de strlen. (ie: if (strlen($foo) < 5) { echo “Foo is too short”; } vs. if (!isset($foo{5})) { echo “Foo is too short”; } ). [Citation]
++$i est plus rapide que $ i++, donc utilisez le pre-increment quand c'est possible. [Citation]
Ne réinventez pas la roue, utilisez les fonctions natives de PHP qui seront toujouts plus rapides; Si vous avez le temps de réecrire, faites le sous forme de modules C / C++. [Citation]
Analysez votre code (Profiler). Utilisez Xdebug debugger pour profilker du code PHP. [Citation]
Documentez votre code. [Citation]
Apprenez les différences entre du bon et du mauvais code. [Citation]
Utilisez les standarts pour une meilleure compréhension de votre code par les autres. [Citation]
Séparez les couches: Contenu, PHP et HTML. HTML dans un autre fichier que le PHP. [Citation]
IL n'est pas obligatoire d'utiliser des systèmes de templates complexes comme Smarty, PHP en intègre déjà, regardez ob_get_contents et extract. [Citation]
Ne jamais avoir confiance en les variables utilisateurs: $_POST et $_GET. Utilisez mysql_real_escape_string quand vous utilisez MySQL, et htmlspecialchars quand vous rendez du HTML. [Citation]
Pour des raisons de sécurité, ne dévoillez jamais d'infos concernant vos paths, extensions et configuration, comme utiliser display_errors ou phpinfo(). [Citation]
Désactivez register_globals (Normalement désactivé par défaut, pas pour rien!). L'utiliser = risque de sécurité. Bientôt, le PHP6 supprimera complètement cette fonction ! [Citation]
Ne jamais utiliser du texte clair pour stocker les mots de passe ou les comparer. Utilisez un hash md5 au minimum. [Citation]
Utilisez ip2long() et long2ip() pour stocker les adresses IP en INT plutôt qu'en STRING. [Citation]
Pour ne pas réinventer la roue, vous pouvez utiliser les nombreux projets PEAR souvent standarts. [Citation]
Quand vous utilisez header(’Location: ‘.$url); n'oubliez pas d'y faire suivre un die(); car le script continue de tourner même après l'instruction. [Citation]
En POO, si une méthode peut être static, alors déclarez la en static. Elle sera 4 fois plus rapide. [Citation].
Incrémenter une variable locale dans une méthode POO est le plus rapide. [Citation]
Incrémenter une propriété d'un objet (eg. $this->prop++) est 3 fois plus lent qu'une variable locale. [Citation]
Incrémenter une variable indéfinie est 9-10 fois plus lent qu'une variable pré définie. [Citation]
Déclarer une variable globale dans une fonction sans l'utiliser ralenti les choses. PHP doit faire une sorte de check sur la variable pour vérifier qu'elle existe. [Citation]
Le nombre de méthodes dans une classe ne change rien aux performances d'appel d'une méthode. [Citation]
Les méthodes d'une classe dérivée vont plus vite que celles de la classe mère. [Citation]
Une fonction appelée avec un ou zéro paramètre prend environ 7-8 fois un $localvar++. 15 $localvar++ pour l'appel d'une méthode similaire. [Citation]
Tout ne doit pas être objet, chaque méthode et propriété consomme de la mémoire. [Citation]
Echappez les chaines provenant de l'extérieur avec mysql_real_escape_string, au lieu de mysql_escape_string ou addslashes. Si magic_quotes_gpc est activé, mieux vaut utiliser stripslashes en premier. [Citation]
Attention lors de l'utilisation de mail() et de ses headers, il y'a des failles de sécurité. [Citation]
Il faut unset les variables que l'on ne se sert plus après s'être connecté à la BDD
Vous n'avez plus qu'à respecter tout ces conseils pour avoir un code PHP optimisé !