Pourquoi le système est-il temps CPU (% sy) de haut?
Je suis en cours d'exécution d'un script qui se charge de gros fichiers. J'ai couru le même script dans un seul core OpenSuSe serveur et PC quad core. Comme prévu dans mon PC, il est beaucoup plus rapide que dans le serveur. Mais, le script ralentit le serveur et il est impossible de faire autre chose.
Mon script est
for 100 iterations
Load saved data (about 10 mb)
temps myscript (PC)
real 0m52.564s
user 0m51.768s
sys 0m0.524s
temps myscript (dans le serveur)
real 32m32.810s
user 4m37.677s
sys 12m51.524s
Je me demande pourquoi "sys" est si élevé lorsque j'exécute le code dans le serveur. J'ai utilisé la commande top pour vérifier la mémoire et le processeur.
Il semble qu'il est encore libre de la mémoire, de sorte que la permutation n'est pas la raison. % sy est si élevé, c'est probablement la raison pour laquelle la vitesse du serveur, mais je ne sais pas ce qui est à l'origine de % sy si haut. Le processus qui utilise le plus fort pourcentage de CPU (99%) est "myscript". %wa est égal à zéro dans la capture d'écran, mais parfois, il devient très élevé (50 %).
Lorsque le script est en cours d'exécution, la charge moyenne est supérieure à 1, mais n'ont jamais vu pour être aussi élevé que 2.
J'ai aussi vérifié mon disque:
strt:~ # hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 16480 MB in 2.00 seconds = 8247.94 MB/sec
Timing buffered disk reads: 20 MB in 3.44 seconds = 5.81 MB/sec
john@strt:~> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 245G 102G 131G 44% /
udev 4.0G 152K 4.0G 1% /dev
tmpfs 4.0G 76K 4.0G 1% /dev/shm
J'ai vérifié ces choses, mais je ne suis toujours pas sûr de ce qu'est le vrai problème dans mon serveur et comment le résoudre. Quelqu'un peut-il identifier une raison probable de la lenteur? Quelle pourrait être la solution?
Ou est-il autre chose que je dois vérifier?
Merci!
- Ce "problème"? Si vous demandez à un système pour faire beaucoup de travail, il va être très occupé jusqu'à ce qu'il fait. Avec un script typique, presque tout le "travail" aura lieu dans les processus enfants (ou noyau de l'espace des tâches sur leur compte, comme les I/O), pas dans le processus du shell d'interpréter le script.
- Lorsque le script est en cours d'exécution, d'autres utilisateurs dans le serveur pour obtenir de réponse lent. Je veux exécuter le script plus rapide et aussi pour ne pas déranger les autres utilisateurs. Si l'ajout de certaines ressources est la solution, je pouvais le faire. Mais, je ne sais pas ce qui pourrait vous aider.
- Si vous vous demandez quelle sorte de système d'achat / améliorations à apporter pour une meilleure performance, c'est probablement une question de super-utilisateur. Si vous voulez essayer de rendre la tâche plus efficace (bricolé solutions peuvent avoir beaucoup de place pour de l'amélioration), vous allez avoir à être beaucoup plus précis sur ce qu'il fait et comment - code, ou au moins une étroite description fonctionnelle.
- J'ai peut-être choisi le mauvais forum. Je suis désolé pour ça. Mais, avant de penser à ce que les ressources de l'acheter, je suis intéressé de savoir quelles sont les causes de système de haut? Est-il de l'espace disque (faut pas que j'ai assez d'espace libre)? Ou est-ce la vitesse de disque? ou quelque chose d'autre? Donc, je veux d'abord explorer la raison (si cela a un sens)
- Votre script est de passer la plupart du temps dans le noyau (
sys 12m51.524s
), éventuellement faire quelques I/O operation. Comme il semble que le script n'beaucoup d'I/O et d'échange. Je vous recommande de regarder dans certains des paramètres du noyau comme swapiness et de l'écriture de pages sale. Aussi, vous pouvez installer et configurersysstat
package pour l'analyse de la sar resports, qui vous donnera plus de renseignements sur ce qui s'est passé pendant ce temps. En outre, vous pouvez également besoin de regarder dans le noyau tourne-disques `sysctl -a | egrep -i " (swap|sale)'
Vous devez vous connecter pour publier un commentaire.
Vous êtes l'obtention d'un haut sys activité, parce que le chargement des données que vous êtes en train de faire prend les appels système qui se produisent dans le noyau. Pour résoudre vos problèmes de lenteur, sans mettre à jour le serveur est peut-être possible. Vous pouvez modifier la priorité de planification. Voir les pages man de nice et de changer la priorité des. Voir ici et surtout:
La gentillesse une gamme de valeurs allant de -20 (la priorité la plus haute, la plus basse à la gentillesse) et 19 (priorité la plus basse, plus la gentillesse).
$ ps -lp 941
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 941 1 0 70 -10 - 1713 poll_s ? 00:00:00 sshd
$ nice-n 19 ./test.sh
Ma gentillesse valeur est de 19
$ changer la priorité des -n 10 -p 941
941 (process ID) vieux priorité -10, nouvelle priorité 10