mardi 23 avril 2013

MySQLd High CPU Usage 100% even without apache2 process

MySQLd may take a High CPU Usage at +100% or so even without apache2 process. Apart from apache daemon, I've also killed all MySQL calling processes such as bind9/named, postfix, *ftpd, etc., etc.
I found no solution, even after much much Googling since more than 6 months...

Under Linux Debian 6 Squeeze MySQL version 5.1.63-0+squeeze1,  I did the MySQL OPTIMIZE TABLE to defragment tables, no effects. mysqltuner.pl gave me always Fragmented tables of about 80. MySQLd CPU climbs to 100%, 120%, 130%,... after 3 minutes of database service, it never lowers to less than 100%. It worked at a very high CPU load, but did not cause system crush, as shown below, captured on 1st January 2013, server up since 31 days:


The CPU usage was at 151%. It's worth noticing that we have a double core CPU, so our CPU maximum ratio is 200%. Moreover, as a virtual dedicated server, we benefit from some hosting company's kind tolerating margin...

The only thing that I didn't accomplish is to export all tables as .sql files and import them all individually.


Today, miracle, without doing that myself, after a server system crush and restarted, mysqltuner.pl gives Fragmented tables: 7, the CPU is lowered to 20%.

I d'ont know how MySQLd repaired framented tables itself. Here is mysqltuner.pl results today:


 >>  MySQLTuner 1.2.0 - Major Hayden 
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering
[OK] Logged in using credentials from debian maintenance account.

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.1.63-0+squeeze1-log
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 170M (Tables: 91)
[--] Data in InnoDB tables: 171M (Tables: 180)
[!!] Total fragmented tables: 7

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 1d 5h 23m 28s (6M q [58.550 qps], 871K conn, TX: 4B, RX: 770M)
[--] Reads / Writes: 95% / 5%
[--] Total buffers: 642.0M global + 10.6M per thread (100 max threads)
[OK] Maximum possible memory usage: 1.7G (84% of installed RAM)
[OK] Slow queries: 0% (1K/6M)
[OK] Highest usage of available connections: 62% (62/100)
[OK] Key buffer size / total MyISAM indexes: 24.0M/167.9M
[OK] Key buffer hit rate: 99.9% (42M cached / 30K reads)
[OK] Query cache efficiency: 43.5% (1M cached / 3M selects)
[!!] Query cache prunes per day: 239329
[OK] Sorts requiring temporary tables: 0% (2 temp sorts / 38K sorts)
[OK] Temporary tables created on disk: 13% (7K on disk / 54K total)
[OK] Thread cache hit rate: 99% (6K created / 871K connections)
[OK] Table cache hit rate: 32% (429 open / 1K opened)
[OK] Open file limit used: 22% (299/1K)
[OK] Table locks acquired immediately: 99% (926K immediate / 927K locks)
[OK] InnoDB data size / buffer pool: 171.8M/180.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    Increasing the query_cache size over 128M may reduce performance
Variables to adjust:
    query_cache_size (> 180M) [see warning above]

This is my good top output:


As a deduction, the high MySQL CPU usage might have a relation with fragmented MySQL tables.

Since then, I deleted all useless MySQL queries, as those on pages that would get no records.

I also replaced mysql_query() by mysqli_query().

Also you should check free forum db tables as PhpBB, SQL injection may result in very big tables. This would also result in a high CPU usage of MySQLd.

I cannot say that I found the exact cause. The multi-direction treatment of our problem eased our MySQLd usage since months.



jeudi 4 avril 2013

Comment Afficher Console Javascript dans navigateurs internet Google Chrome, Firefox, IE, Microsoft Edge, Opera, Safari

Commençon par la fin, c.-à-d., le résumé :


Pour afficher les consoles de Javascript dans les navigateurs, voici les raccourcis à utiliser :
NavigateurMenuRaccourcis
Google ChromeBouton malette (Personnaliser et configurer Google Chrome/Customize and control Google Chrome)/Menu Outils/Console JavascriptCtrl + Maj + J ou
Ctrl + Maj + I
FirefoxMenu Firefox/Menu Développement web/Console d'erreursCtrl + Maj + J
SafariBouton Outils/Afficher la barre des menus. Puis Bouton Outils/Préférences.../Avancées/Afficher le menu Développement dans la barre des menusCtrl + Alt + C ou
Ctrl + Option + C (MacOS)
OperaMenu Opera/Afficher la barre de menu. Puis dans la barre de menu, cliquez sur le menu Outils/Avancét/Opera DragonflyCtrl + Maj + I
EdgeBouton Outils [...]/Menu Outils de développement F12/Onglet ConsoleF12
IEBouton Outils/Menu Outils de développement F12/Onglet ConsoleF12


Continuons par le début, c.-à-d., les Expériences Navigateurs :


Pour les Webmasters, il est important que son site ne présente aucune faute d'exécution de son Javascript. Il suffit d'activer cette option dans IE 9 pour constater qu'il y a beaucoup de sites internet comportant des erreurs d'exécution de Javascript, >50% ?

Internet Explorer 9/Options Internet/Onglet Avancé/Navigation/Cocher l'option "Afficher une notification de chaque erreur de script"/Appuyez sur le bouton [OK].

Un popup va vous avertir à chaque erreur de script lorsque vous visitez un site non vérifié d'erreur de Javascript.

Une fois paramètrage fait, visitez avec IE le site "http://wordpress.com/", classé dans les top sites 21ième par Alexa.com.

Une fois vous êtes sur la page d'accueil http://wordpress.com/, cliquez sur le bouton [Watch a video], le vidéo démarre sans problème. Puis pressez le bouton [Reload] du navigateur, voici les 2 erreurs par capture d'écran du jeudi 4 avril 2013 :

Vous voyez que même un grand site professionnel commet des erreurs en Javascript.

C'est dire l'importance de déboguage de Javascript.

Afin d'afficher les erreurs Javascript, il faut activer la console de Javascript,  les navigateurs internet Google Chrome, Firefox, IE, Opera, Safari ont tous les démarches différentes.

Activer la console Javascript dans Google Chrome (Version 26.0.1410.43 m
) :

Bouton malette (Personnaliser et configurer Google Chrome/Customize and control Google Chrome)/Menu Outils/Console Javascript.

Ou par touches raccourcis : Ctrl + Maj + J

Les erreurs Javascript seront affichées dans l'onglet console.


Activer la console Javascript dans Firefox (Version 19.0.2):

Menu Firefox/Menu Développement web/Console d'erreurs.

Ou par touches raccourcis : Ctrl + Maj + J

La console d'erreurs Javascript que voici :

Activer la console Javascript dans Internet Explorer IE (Version 9.0.8112.16421):

Bouton Outils /Menu Outils de développement F12/Onglet Console.

Ou par touches raccourcis : F12

La console d'erreurs Javascript que voici :




Activer la console Javascript dans Opera (Version 12.15):

Menu Opera/Afficher la barre de menu. Puis dans la barre de menu, cliquez sur le menu Outils/Avancét/Opera Dragonfly Ctrl + Maj + I.

Ou par touches raccourcis : Ctrl + Maj + I

La console d'erreurs Javascript que voici :


Activer la console Javascript dans Safari (Version 5.1 (7534.50 
)) :

Bouton Outils/Afficher la barre des menus.


Puis Bouton Outils/Préférences.../Avancées/Afficher le menu Développement dans la barre des menus

Puis dans la barre des Menus, 
Menu "Développement"/Afficher la console d'erreurs Ctrl+Options+C.


Ou par touches raccourcis en Windows : Ctrl + Alt + C

Voici la console de Javascript :

Ici j'ai flouté quelques informations confidentielles.