recherche
MaisonTutoriel systèmeLinux60 secondes pour conquérir l'or de Linux

60 secondes pour conquérir l'or de Linux

Feb 13, 2024 pm 07:20 PM
linuxlinux教程linux系统linux命令shell脚本内存占用Linux embarquéDébuter avec Linuxapprentissage Linux

Si votre serveur Linux subit soudainement une augmentation de charge et que des messages texte d'alarme continuent d'affluer sur votre téléphone mobile, comment pouvez-vous trouver la cause première des problèmes de performances Linux dans les plus brefs délais ? Vous souhaiterez peut-être vous référer à cet article de blog de l'équipe d'ingénierie des performances de Netflix pour savoir comment diagnostiquer rapidement les problèmes de performances des machines en une minute grâce à dix commandes.

抓住 Linux 黄金 60 秒

Aperçu

En exécutant la commande suivante, vous pouvez avoir une compréhension générale de l'utilisation des ressources système en 1 minute.

  • disponibilité
  • dmesg | queue
  • vmstat 1
  • mpstat -P TOUS 1
  • pidstat1
  • iostat -xz 1
  • gratuit -m
  • sar -n DEV 1
  • sar -n TCP,ETCP 1
  • haut

Certaines de ces commandes nécessitent l'installation du package sysstat, et certaines sont fournies par le package procps. La sortie de ces commandes permet de localiser rapidement les goulots d'étranglement des performances et de vérifier les mesures d'utilisation, de saturation et d'erreur de toutes les ressources (CPU, mémoire, E/S disque, etc.), ce qu'on appelle la méthode USE.

Présentons ces commandes une par une. Pour plus de paramètres et d'instructions sur ces commandes, veuillez vous référer au manuel des commandes.

temps de disponibilité

$ uptime
23:51:26 up 21:31,  1 user,  load average: 30.02, 26.43, 19.02

Cette commande peut vérifier rapidement l'état de charge de la machine. Dans les systèmes Linux, ces données représentent le nombre de processus en attente de ressources CPU et bloqués dans des processus d'E/S ininterruptibles (l'état du processus est D). Ces données peuvent nous donner une compréhension de haut niveau de l’utilisation des ressources système.

Le résultat de la commande

indique les conditions de charge moyennes pendant 1 minute, 5 minutes et 15 minutes respectivement. Grâce à ces trois données, vous pouvez comprendre si la charge du serveur devient tendue ou diminue dans la zone. Si la charge moyenne sur 1 minute est très élevée et la charge moyenne sur 15 minutes est très faible, cela signifie que le serveur commande une charge élevée et vous devez rechercher plus en détail où les ressources du processeur sont consommées. D'un autre côté, si la charge moyenne sur 15 minutes est élevée et la charge moyenne sur 1 minute est faible, il est possible que le moment où les ressources CPU sont limitées soit révolu.

Le résultat de l'exemple ci-dessus montre que la charge moyenne de la dernière minute est très élevée et bien supérieure à la charge des 15 dernières minutes. Par conséquent, nous devons continuer à rechercher quels processus du système actuel consomment beaucoup de ressources. . Vous pouvez approfondir vos recherches en utilisant vmstat, mpstat et d'autres commandes qui seront présentées ci-dessous.

dmesg丨queue

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

Cette commande affichera les 10 dernières lignes du journal système. Dans la sortie de l'exemple, vous pouvez voir une destruction du noyau et une perte de paquets TCP. Ces journaux peuvent aider à résoudre les problèmes de performances. N'oubliez pas cette étape.

vmstat 1

$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0
32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0
32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0
32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0
32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0

Commande vmstat(8), chaque ligne affichera certains indicateurs de base du système, qui nous permettront de comprendre l'état du système plus en détail. Le paramètre suivant 1 indique que les informations statistiques sont générées une fois par seconde. L'en-tête indique la signification de chaque colonne. Ces colonnes introduisent certaines colonnes liées au réglage des performances :

.
  • r : nombre de processus en attente de ressources CPU. Ces données reflètent mieux la charge du processeur que la charge moyenne. Les données n'incluent pas les processus en attente d'E/S. Si cette valeur est supérieure au nombre de cœurs CPU de la machine, alors les ressources CPU de la machine sont saturées.
  • free : La quantité de mémoire disponible dans le système (en kilo-octets). Si la mémoire restante est insuffisante, cela entraînera également des problèmes de performances du système. La commande gratuite présentée ci-dessous peut fournir une compréhension plus détaillée de l'utilisation de la mémoire système.
  • si, so : le nombre d'écritures et de lectures dans la zone d'échange. Si cette donnée n'est pas 0, cela signifie que le système utilise déjà la zone de swap (swap) et que la mémoire physique de la machine est insuffisante.
  • us, sy, id, wa, st : ils représentent tous la consommation de temps CPU. Ils représentent respectivement le temps utilisateur (user), le temps système (noyau) (sys), le temps d'inactivité (idle), le temps d'attente IO (wait) et Temps volé (volé, généralement consommé par d'autres machines virtuelles).

Les temps CPU ci-dessus nous permettent de comprendre rapidement si le CPU est occupé. Généralement, si la somme du temps utilisateur et du temps système est très importante, le processeur est occupé à exécuter des instructions. Si le temps d'attente des E/S est long, le goulot d'étranglement du système peut être l'E/S disque.

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

mpstat-P ALL 1

$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
07:38:49 PM  CPU   %usr  %nice   %sys %iowait   %irq  %soft  %steal  %guest  %gnice  %idle
07:38:50 PM  all  98.47   0.00   0.75    0.00   0.00   0.00    0.00    0.00    0.00   0.78
07:38:50 PM    0  96.04   0.00   2.97    0.00   0.00   0.00    0.00    0.00    0.00   0.99
07:38:50 PM    1  97.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   2.00
07:38:50 PM    2  98.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   1.00
07:38:50 PM    3  96.97   0.00   0.00    0.00   0.00   0.00    0.00    0.00    0.00   3.03
[...]

该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。

pidstat 1

$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/0
07:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave
07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  java
07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java
07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java
07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat
07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave
07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java
07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass
07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat

pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。

iostat-xz 1

$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          73.96    0.00    3.73    0.03    0.06   22.21
Device:   rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvda        0.00     0.23    0.21    0.18     4.52     2.08    34.37     0.00    9.98   13.80    5.42   2.44   0.09
xvdb        0.01     0.00    1.02    8.94   127.97   598.53   145.79     0.00    0.43    1.78    0.28   0.25   0.25
xvdc        0.01     0.00    1.02    8.86   127.79   595.94   146.50     0.00    0.45    1.82    0.30   0.27   0.26
dm-0        0.00     0.00    0.69    2.32    10.47    31.69    28.01     0.01    3.23    0.71    3.98   0.13   0.04
dm-1        0.00     0.00    0.00    0.94     0.01     3.78     8.00     0.33  345.84    0.04  346.81   0.01   0.00
dm-2        0.00     0.00    0.09    0.07     1.35     0.36    22.50     0.00    2.55    0.23    5.62   1.78   0.03
[...]

iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:

  • r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
  • await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
  • avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
  • %util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。

如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

free -m

$ free -m
             total       used       free     shared    buffers     cached
Mem:        245998      24545     221453         83         59        541
-/+ buffers/cache:      23944     222053
Swap:            0          0          0

free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。

sar -n DEV 1

$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU)
12:16:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:16:49 AM      eth0  18763.00   5032.00  20686.42    478.30      0.00      0.00      0.00      0.00
12:16:49 AM        lo     14.00     14.00      1.36      1.36      0.00      0.00      0.00      0.00
12:16:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:16:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:16:50 AM      eth0  19763.00   5101.00  21999.10    482.56      0.00      0.00      0.00      0.00
12:16:50 AM        lo     20.00     20.00      3.25      3.25      0.00      0.00      0.00      0.00
12:16:50 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。

sar -n TCP,ETCP 1

$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
12:17:19 AM  active/s passive/s    iseg/s    oseg/s
12:17:20 AM      1.00      0.00  10233.00  18846.00
12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:17:20 AM      0.00      0.00      0.00      0.00      0.00
12:17:20 AM  active/s passive/s    iseg/s    oseg/s
12:17:21 AM      1.00      0.00   8359.00   6039.00
12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:17:21 AM      0.00      0.00      0.00      0.00      0.00

sar命令在这里用于查看TCP连接状态,其中包括:

  • active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;
  • passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;
  • retrans/s:每秒TCP重传数量;

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

top

$ top
top - 00:15:40 up 21:56,  1 user,  load average: 31.09, 29.87, 29.92
Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie
%Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffers
KiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 20248 root      20   0  0.227t 0.012t  18748 S  3090  5.2  29812:58 java
  4213 root      20   0 2722544  64640  44232 S  23.5  0.0 233:35.37 mesos-slave
 66128 titancl+  20   0   24344   2332   1172 R   1.0  0.0   0:00.07 top
  5235 root      20   0 38.227g 547004  49996 S   0.7  0.2   2:02.74 java
  4299 root      20   0 20.015g 2.682g  16836 S   0.3  1.1  33:14.42 java     1 root      20   0   33620   2920   1496 S   0.0  0.0   0:03.82 init
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:05.35 ksoftirqd/0
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:06.94 kworker/u256:0
     8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。

总 结

排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Quelles sont les principales tâches d'un administrateur du système Linux?Quelles sont les principales tâches d'un administrateur du système Linux?Apr 19, 2025 am 12:23 AM

Les principales tâches des administrateurs système Linux incluent la surveillance du système et le réglage des performances, la gestion des utilisateurs, la gestion des packages de logiciels, la gestion de la sécurité et la sauvegarde, le dépannage et la résolution, l'optimisation des performances et les meilleures pratiques. 1. Utilisez le haut, le HTOP et d'autres outils pour surveiller les performances du système et régler. 2. Gérez les comptes d'utilisateurs et les autorisations via des commandes UserAdd et d'autres commandes. 3. Utilisez APT et YUM pour gérer les packages logiciels pour assurer les mises à jour du système et la sécurité. 4. Configurez un pare-feu, surveillez les journaux et effectuez une sauvegarde de données pour assurer la sécurité du système. 5. Dépannage et résoudre par l'analyse des journaux et l'utilisation des outils. 6. Optimiser les paramètres du noyau et la configuration des applications et suivre les meilleures pratiques pour améliorer les performances et la stabilité du système.

Est-il difficile d'apprendre Linux?Est-il difficile d'apprendre Linux?Apr 18, 2025 am 12:23 AM

Apprendre Linux n'est pas difficile. 1.Linux est un système d'exploitation open source basé sur UNIX et est largement utilisé dans les serveurs, les systèmes intégrés et les ordinateurs personnels. 2. Comprendre le système de fichiers et la gestion de l'autorisation est la clé. Le système de fichiers est hiérarchique et les autorisations incluent la lecture, l'écriture et l'exécution. 3. Les systèmes de gestion des packages tels que APT et DNF rendent la gestion des logiciels pratique. 4. La gestion des processus est implémentée via PS et les commandes supérieures. 5. Commencez à apprendre à partir de commandes de base telles que MKDIR, CD, Touch et Nano, puis essayez une utilisation avancée telle que les scripts shell et le traitement de texte. 6. Les erreurs courantes telles que les problèmes d'autorisation peuvent être résolues via Sudo et CHMOD. 7. Les suggestions d'optimisation des performances incluent l'utilisation de HTOP pour surveiller les ressources, le nettoyage des fichiers inutiles et l'utilisation de SY

Quel est le salaire de l'administrateur Linux?Quel est le salaire de l'administrateur Linux?Apr 17, 2025 am 12:24 AM

Le salaire annuel moyen des administrateurs Linux est de 75 000 $ à 95 000 $ aux États-Unis et de 40 000 € à 60 000 € en Europe. Pour augmenter le salaire, vous pouvez: 1. Apprendre en permanence de nouvelles technologies, telles que le cloud computing et la technologie des conteneurs; 2. Accumuler l'expérience du projet et établir un portefeuille; 3. Établissez un réseau professionnel et développez votre réseau.

Quel est le but principal de Linux?Quel est le but principal de Linux?Apr 16, 2025 am 12:19 AM

Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

Internet fonctionne-t-il sur Linux?Internet fonctionne-t-il sur Linux?Apr 14, 2025 am 12:03 AM

Internet ne s'appuie pas sur un seul système d'exploitation, mais Linux joue un rôle important. Linux est largement utilisé dans les serveurs et les appareils réseau et est populaire pour sa stabilité, sa sécurité et son évolutivité.

Quelles sont les opérations Linux?Quelles sont les opérations Linux?Apr 13, 2025 am 12:20 AM

Le cœur du système d'exploitation Linux est son interface de ligne de commande, qui peut effectuer diverses opérations via la ligne de commande. 1. Les opérations de fichiers et de répertoires utilisent des commandes LS, CD, MKDIR, RM et d'autres commandes pour gérer les fichiers et les répertoires. 2. La gestion des utilisateurs et des autorisations garantit la sécurité du système et l'allocation des ressources via UserAdd, Passwd, ChMOD et d'autres commandes. 3. La gestion des processus utilise PS, Kill et d'autres commandes pour surveiller et contrôler les processus du système. 4. Les opérations réseau incluent Ping, Ifconfig, SSH et d'autres commandes pour configurer et gérer les connexions réseau. 5. Commandes d'utilisation de surveillance et de maintenance du système telles que TOP, DF, DU pour comprendre l'état de fonctionnement du système et l'utilisation des ressources.

Boostez la productivité avec les raccourcis de commande personnalisés à l'aide d'alias LinuxBoostez la productivité avec les raccourcis de commande personnalisés à l'aide d'alias LinuxApr 12, 2025 am 11:43 AM

Introduction Linux est un puissant système d'exploitation favorisé par les développeurs, les administrateurs système et les utilisateurs de l'énergie en raison de sa flexibilité et de son efficacité. Cependant, l'utilisation fréquente de commandes longues et complexes peut être fastidieuse et ER

À quoi sert Linux?À quoi sert Linux?Apr 12, 2025 am 12:20 AM

Linux convient aux serveurs, aux environnements de développement et aux systèmes intégrés. 1. En tant que système d'exploitation de serveurs, Linux est stable et efficace, et est souvent utilisé pour déployer des applications à haute monnaie. 2. En tant qu'environnement de développement, Linux fournit des outils de ligne de commande efficaces et des systèmes de gestion des packages pour améliorer l'efficacité du développement. 3. Dans les systèmes intégrés, Linux est léger et personnalisable, adapté aux environnements avec des ressources limitées.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP