

Greywolf
-
Compteur de contenus
9 320 -
Inscription
-
Dernière visite
-
Jours gagnés
1
Type de contenu
Profils
Forums
Blogs
Messages posté(e)s par Greywolf
-
-
sur XP Pro apparemment
passer la clé EnableIPRouter à 1
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\Tcpip \Parameters
pour XP Home aucune idée...
http://www.windowsnetworking.com/articles_...s/w2kprout.html
pour le WINS, il faut en effet une version serveur (ou un Linux
) sinon il y a toujours la possibilité du fichier lmhosts
-
j'ai voulu bloquer des images en choisissant "bloquer avec Adblock" dans le menu contextuel, malheureusement j'ai cliqué sur "bloquer les images provenant de [..... ] avec Firefox"
ralala
trois réponses à côté
Heureusement qu'il existe encore des gens qui lisent les posts avant de répondre
-
Les PC reliés au switch accède à 192.168.1.0/24 puisque c'est par là qu'ils ont accès à internet (DNS 192.168.1.1 route par défaut 192.168.0.1 qui possède une route par défaut via 192.168.1.1).
Le pont réseau peut peut-être fonctionner (bien que les tentatives sous windows soient souvent infructueuses).
Le réseau 192.168.1.0/24 ne sait pas comment accéder au réseau 192.168.0.0/24
On peut conserver cet adressage et créer une route sur 192.168.1.1 qui redirige les requêtes vers 192.168.0.0/24 via 192.168.1.4 (ou créer cette route sur chaque PC du réseau 192.168.1.0)
(+ activer le routage IP sur 192.168.1.4)
netbios fonctionnant par diffusion (et étant donc limité à son sous-réseau), un serveur WINS serait le bienvenu ou 192.168.1.4 fait maître explorateur sur les 2 réseaux.
-
-
chmod 000 c'est violent, personne n'a plus le droit de lire, écrire, exécuter le fichier
tu ne voulais pas faire un umask 000 plutôt ? (ou un chmod 777 voire 644?)
-
branchement en ethernet, carte réseau configurée en adressage automatique: rien à faire (mis à part brancher le câble RJ45)
-
euh dites.... windows ne démarre pas, comment faire "Démarrer => Exécuter"
-solution 1: trouver un CD de XP Home et tenter une copie de la dll via la console de récupération
-solution 2: démarrer sur un LiveCD linux proposant l'écriture sur ntfs (la dernière Knoppix par exemple) et copier la dll
-
sinon il y a virtualBox qui est sympathique dans le genre
-
le mode routeur de la freebox est-il bien activé?
-
Bonjour,
l'adresse FTP et le nom de domaine http pointe-t-elle vers la même adresse IP?
essayer en ligne de commande (démarrer=>exécuter=>cmd)
ping nom_de_domaine_http ping nom_de_domaine_ftp
comparer les adresses IP : aaa.bbb.ccc.ddd
-
STP: Shielded Twisted Pair
UTP: Unshielded Twisted Pair
sont deux catégories de câble réseau : 8 câbles enroulées 2 à 2 en 4 apires pour limiter les interférences électromagnétiques, STP est blindé UTP ne l'est pas
FTP, je ne connaissais pas, mais c'est Foiled Twisted Pair
-
sur easyphp (donc wamp), on doit en effet activer l'extension mysql.so dans php.ini
-
Sujet fermé.
Merci de bien vouloir consulter la charte du forum.
-
Salut,
le pont réseau ne semble pas fonctionnel.
La connexion à la livebox se fait-elle en DHCP ou non?
Y-a-t-il un filtrage sur les adresses MAC sur la livebox (probablement si tu es en wifi)?
quelle est l'adresse MAC de ton bridge?
si tu sniffes les paquets émis par ton PC ou ta machine virtuelle, quelle est l'adresse MAC associée aux paquets?
as tu moyen d'essayer ce type de connexion de ta machine virtuelle à ton réseau par une interface filaire?
-
ben en fait tu tentes de faire un ping vers une adresse non routable. Ton routeur te renvoie un ICMP type 3 code 13 puisque les RFC interdisent de router ce type d'adresse.
-
Salut,
qu'est ce qui te fait croire que cette adresse est sur ton LAN?
la classe 10.0.0.0/8 est en effet réservé aux gros LAN.
Sur quelle interface sont arrivés ces paquets?
l'adressage 10.59.0.0/16 est souvent utilisée dans la configuration par défaut d'OpenVPN.
As tu utilisé ce soft?
un soft de virtualisation quelconque créant des interfaces TUN/TAP ?
-
bingo!
en effet, beaucoup de données étaient envoyées au navigateur. En les regardant, il s'avérait qu'ils contenaient des messages d'erreurs en rapport avec la fonction fprintf...
En re-regardant le code ci-dessus, l'erreur saute maintenant aux yeux:
fprintf attendait 9 arguments séparés par des tabulations et je ne lui en fournissait que 7
Comme quoi sniffer les paquets, ça a du bon.
Merci beaucoup.
J'ai fait une refonte entière du code source selon tes conseils et j'obtiens ces performances
Avant, avec 1 seul analyseur sélectionné (~100000 entrées / analyseur), la requête mettait entre 15 et 20 minutes à apparaitre
Maintenant, avec 8 analyseurs sélectionnées, la requête met :
Temps d'exécution du script : 19.618790149689 secondes
c'était donc bien le développeur qui codait avec ses pieds (gauche de surcroît
)
-
bon, j'améliore doucement les choses.
Je stocke la requête construite pour chaque analyseur dans une variable de session dont je récupère la partie WHERE .... dans le script jpgraph et en fonction des choix de l'utilisateur, je fais les SELECT qui vont bien.
Du coup, j'ai mis de côté la fonction FetchAllData() pour réaliser un
while ($row = mysql_fetch_array($mysql_result, MYSQL_ASSOC)) { fprintf($fp,"%s\t%s\t%s\t%s\t%s\t%.3f\t%.3f\t%.3f\t%s\n", \ $row["travel_date"],$row["travel_month"],$row["travel_type"],$row["section_type"],\ $row["my_hour"],$row["count"],$row["period"]); array_push($data,$row["count"]); }
$mysql_result est issue de mysql_query($query); qui est exécutée si il existe des enregistrements correspondant aux critères (SELECT COUNT)
Donc cette boucle while est censée m'écrire dans un fichier txt en local sur le serveur les différentes valeurs retournées par la requête et remplir un tableau de data pour une colonne en particulier.
Si je ne commente pas la fonction fprintf, je fais planter mon navigateur
La charge en mémoire virtuelle ne cesse d'augmenter jusqu'à faire planter le navigateur.
Le php étant exécuté côté serveur pourquoi la charge du client augmente-t-elle?
-
:-/ plusieurs variables de session font swapper mon serveur...
m'en vais regarder du côté des vues avec une nouvelle requête mysql
-
Quel est l'ordre de grandeur ?
pour la même requête, je suis passé de + de 15 minutes à 30 secondes
je vais regarder du côté du resultset (?).
Pour jpgraph, l'étape 4 décrite dans mon premier post est la création du formulaire pour l'utilisateur:
- choix du type de graphique
- choix des abscisses à représenter
- choix des analyseurs et, in extenso, choix du ou des polluants associés à tracer
- validation et envoi au script jpgraph par POST
Au tout début, j'ai un peu honte de le dire, j'avais explosé mon tableau de résultats en une chaîne de caractère avec implode pour les coller dans le champ value du formulaire.... j'ai rapidement abandonné au vu des performances réseau nécessaires: balancer 150M de data au client pour qu'il les renvoie au serveur par la méthode POST ce n'était pas génial.
Selon la doc de jpgraph, soit les data sont statiques (on oublie), soit elles sont extraites d'une BDD par le script de création jpgraph soit elles sont envoyées par POST.
Comme je n'avais pas envie de refaire une requête mysql pour récupérer les data précédemment extraites, j'ai pensé aux variables de session...
Sinon comme alternative, je peux peut-être stocker les requêtes mysql créées par les choix de l'utilisateur dans une variable de session et refaire un mysql_query dans le script jpgraph afin de récupérer les data à tracer. L'avantage c'est que la requête mysql sera dans le cache et sera censément traitée rapidement.
Je vais tenter les deux approches.
-
<?php session_start(); ini_set('error_reporting', E_ALL); ini_set('display_errors', TRUE); ini_set('max_execution_time',0); require_once 'Math/Stats.php'; include 'scr/fetchdata.php'; $temps_debut = microtime_float(); //Rappel des choix postés par l'utilisateur ... //connexion à la BDD $hote="localhost"; $utilisateur=$_SESSION['login']; $password=$_SESSION['password']; $connexion = mysql_connect($hote,$utilisateur,$password); //si la connexion est active et si au moins un analyseur a été choisi if ($connexion>0 && isset($_POST['analyseur'])) { mysql_select_db("mabase") or die("Could not select database"); //écriture d'une div contenant un tableau //Construction d'une requete par analyseur foreach ($analyseur as &$value) { //Sélection des champs a extraire en fonction de l'analyseur switch ($value) { case a: $champs="......"; case b: ... } //requete commune $query = "SELECT $champs FROM `$value` INNER JOIN `urban_section` ON `$value`.`urban_section_idurban_section` = urban_section.idurban_section INNER JOIN `travel_date` ON `$value`.`travel_date_idtravel_date` = travel_date.idtravel_date INNER JOIN `travel` ON `$value`.`travel_idtravel` = travel.idtravel WHERE `valid` = '1'"; //Construction de la requ?te en fonction des choix de l'utilisateur //rajout de clauses WHERE //nom de fichier $filename ="requete_".$value.".txt"; //Récupération des résultats $mysql_result = mysql_query($query); //création d'un tableau associatif $assoc_result qui comporte $nrows lignes $assoc_result=array(); $nrows=fetchAllData($mysql_result,$assoc_result); mysql_free_result($mysql_result);
jusqe là ça va à peu près, la fonction fetchAllData est gourmande en mémoire mais ça passe plutôt pas trop mal
//Création d'un fichier de résultat $repertoire = "uploadtemp/"; if (!($fp = fopen("$repertoire$filename", 'w'))) { return; } //Si la requete retourne des résultats, on extrait des arrays du tableau associatif pour chaque analyseur if (isset($nrows) && $nrows != 0) { switch($value) { case a: $res_a_date = $assoc_result['TRAVEl_DATE']; .... fprintf($fp,"date\tMois\tType trajet\ttron?on\theure\tNOx\tNO\tNO2\tperiodes\n"); for ($i = 0; $i < $nrows; $i++) { fprintf($fp,"%s\t%s\t%s\t%s\t%s\t%.3f\t%.3f\t%.3f\t%s\n",$res_a_date[$i],$res_a_month[$i],$res_a_type[$i],$res_a_section[$i],$res_a_hour[$i],$res_a_NOx[$i],$res_a_NO[$i],$res_a_NO2[$i],$res_a_period[$i]); } fclose($fp); $s = new Math_Stats(); $s->setData($res_a_NOx); $mean = $s->mean(); $median = $s->median(); $quartiles = $s->quartiles(); $min = $s->min(); $max = $s->max(); unset($s); printf ('<tr><td>%s</td><td>%.3f</td><td>%.3f</td><td>%.3f</td><td>%.3f</td><td>%.3f</td><td>%.3f</td><td>%.3f</td><td>%.3f</td><td><a href="uploadtemp/%s">%s</a></td></tr>', $value, $mean, $median, $quartiles[25], $quartiles[75], $min, $max, $quartiles[10], $quartiles[90],$filename,$value); break; case b: .... } unset($assoc_result); } else { echo '<tr><td>'. $value .'</td><td>Aucune valeur pour l\'analyseur ' . $value . '</td></tr>'; unset ($assoc_result); } //fin de la boucle foreach($analyseur as &$value) } //fermeture de la div echo '</table></div>'; //fin de la condition if ($connexion >0) } else { echo "Impossible de se connecter à la base de données !"; }
Si je laisse la partie dans laquelle j'explose $assoc_result en plusieurs arrays $res_[nom_de_l'analyseur]_[nom_du_champ] le temps de traitement explose
Peut-être y-a-t-il des grosses erreurs dans ce code? l'utilisation de boucle foreach et de switch n'arrange probablement pas le système.
Y-a-t-il un moyen plus simple de récupérer les résultats d'une requête mysql non pas en ligne mais en colonne? faire une requête par champ plutôt qu'une seule requête sur plusieurs champs?
edit:
Si je n'explose plus $assoc_result en petits tableaux, ça va tout de suite beaucoup mieux.
J'ai besoin tout de même d'accéder aux résultats extraits pour chaque analyseur pour le script de création de graphique jpgraph. J'ai donc associé dans ma boucle foreach($analyseur as &$value) le tableau $assoc_result à une variable de session $_SESSION['nom_de_l'analyseur']
il faudrait que j'accède facilement à $_SESSION['nom_de_l'analyseur']['type_de_polluant'][$i]
Les variables de session sont-elles faites pour trimbaler de grosses quantités de data?
-
Hello Kewlcat,
merci de ta réponse et des pistes indiquées.
En fait la page n'est reçue (en fait affichée par le navigateur) qu'au bout de 15 minutes :-/. Le navigateur reste sur le formulaire initial et l'indicateur de chargement tourne, tourne, tourne...
Comment est configuré ton "accélérateur de PHP" ? Peut-on forcer un flush des buffers ? Y aurait-il des erreurs de Content-Length qui forceraient le navigateur à attendre des données alors que PHP a fini ?la configuration est celle par défaut, je vais essayer de le désactiver pour voir si ça change quelquechose.
Comment puis-je voir de potentielles erreurs de Content-Length? (en sniffant les headers HTTP ?)
Te sens-tu prêt à ajouter des traces partout (messages sur la console, messages dans la page, ou autre solution de ton choix), vraiment partout et pas uniquement globalement, pour déterminer quelle méthode démarre / finit à quelle heure, et ainsi avoir des infos beaucoup plus précises que ce que top te fournit ?je vais essayer de logger un maximum de choses dans syslog, la page ne s'affichant pas au fur et à mesure, je vais peut être commenter encore des bouts de code pour espérer trouver où cela coince (si ça vient du code) :-/
edit: ce qui semble prendre du temps, c'est la manipulation de mon tableau associatif, je mets mon code dans un autre post.
Peux-tu essayer d'utiliser ethereal ou tcpdump (ou un autre outil de ton choix) pour savoir exactement ce qui transite (entêtes HTTP comprises) sur le réseau pendant tout le temps de la requête ? "Ce qui transite", mais aussi et surtout "quand" ...Je vais utiliser wireshark sur le serveur pour voir ce qui est envoyé et quand c'est envoyé
edit: bon rien de transcendant apparemment, 8 paquets envoyés pour le formulaire, la réponse vient plus de 15 minutes après
Pour MyISAM, on me disait que c'était plus rapide pour une base destinée essentiellement à des requêtes SELECT.
-
Bonjour,
Dans le cadre du boulot, j'ai créé une base de données sous MySQL v5 type MyISAM associé à Apache2 (mpm-prefork) avec php5 en module, le tout sous Debian Testing sur un AMD 64 3500+ 1Go DDR-RAM.
La BdD grossissant de jour en jour je suis confronté à des problèmes de performances lorsque l'on réalise des requêtes qui retournent beaucoup de résultats (> 100000) avec un processus Apache2 qui tourne sans arrêt.
Ma BdD consiste en 15 tables correspondant chacune à un analyseur; chaque table comporte entre 10 et 20 champs selon les analyseurs; + 3 tables d'identifiant divers (date, lieu,...) exportées en clés étrangères dans les 15 premières.
L'application PHP développée consiste en
- authentification de l'utilisateur avec stockage des infos de login/pass dans des variables de session
formulaire de sélection pour une construction personnalisée des requêtes mysql à réaliser (Cf mon précédent
construction de la requête en fonction des choix récupérées par la méthode POST, interrogation de la base MySQL
Calculs sur les résultats retournés avec des fonctions statistiques fournies par Stats.php du projet PEAR et écriture dans un fichier texte sur le serveur des data extraites
transformation des résultats fournis en ligne par Mysql pour les récupérer en colonne *
création d'un formulaire pour tracer des graphiques à partir des résultats récupérés à l'aide de la librairie Jpgraph*
tout ceci marche pas trop mal du moment que la requête n'englobe pas trop d'analyseurs (boucle foreach sur chaque analyseur sur les étapes 2 et 3) ou si la requête est limitée à un analyseur et quelques dates/lieux/....
Au niveau optimisation, je me suis inspiré de ce site http://www.onlamp.com/pub/a/onlamp/2004/02...amp_tuning.html
- j'ai mis les grosses requêtes en cache SQL; lorsque je réalise une grosse requête directement via le client mysql, celle ci met moins d'une seconde à sortir (et moins de 0.1 seconde quand il y a un hit dans le cache)
j'ai créé des index sur les champs utilisés dans les clauses WHERE des requêtes mysql
j'ai compilé un accélérateur php basé sur Zend (eaccelerator)
j'ai modifié les paramètres mpm_perfork comme suit
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 10 MaxRequestsPerChild 100 </IfModule>
Je pense avoir deux goulots d'étranglements dans mon appli PHP au niveau des étapes 3 et 4 (celles avec les *)
-mysql_fetch_array retourne les éléments du tableau de résultat ligne par ligne et moi je les veux colonne par colonne; j'ai donc une fonction fetch_AllDataqui lit ligne à ligne le tableau de résultat et fait une rotation à 90° de tout ce monde là dans un tableau associatif avec le noms de mes champs en en-tête.
- le tableau associatif est ensuite éclaté en autant de variables de session qu'il y a de champs sélectionnés (multipliés par le nombre d'analyseurs choisis) pour pouvoir les passer au script jpgraph
J'ai dans un premier temps commenté cette dernière partie (l'étape 4 n'est donc pas réalisée) et j'ai inséré des fonctions microtime en début et fin de mon script php pour évaluer son temps d'éxécution global:
Sur une requête globale sur 1 table (avec des inner join sur les 3 tables date/lieu/...), le script php m'indique un temps d'exécution de 3.3 secondes dont 1.5 seconde pour la fonction fetch_Alldata.
sauf que avant de voir ce score s'afficher sur mon navigateur, j'ai du patienter 10-15 minutes :-/
Pendant ce temps, un processus apache2 occupe 99,9% de la charge CPU avec une charge mémoire comprise entre 10 et 20% (infos données par top)
Si je stoppe le processus apache en insérant une clause max_execution_time dans le script php, j'obtiens la même page beaucoup plus rapidement mais avec une erreur de temps d'exécution dépassé (sauf que tout y est...)
si certains ont des idées sur la question, parce que là.....
merci
- authentification de l'utilisateur avec stockage des infos de login/pass dans des variables de session
-
Pareil, pas d'objections. Cependant, il faut se méfier des liens morts. Un lien peut être actif aujourd'hui et mort le lendemain (ou quelques mois plus tard).
Il convient donc de reprendre les éléments clé du lien en plus de citer ce dernier afin de ne pas perdre l'information en cas de problème avec l'autre site.
Je parle bien d'éléments clé et pas de "pompage intégral" bien évidemment.
[Résolu] Accéder à mon compte FTP Free depuis mon FAI étranger
dans Internet & Réseaux
Posté(e)
http://ftpperso.free.fr/
non?