Quarkus: модСрнизация Π½Π° прилоТСнията Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° helloworld ΠΎΡ‚ JBoss EAP Quickstart (ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅)

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички – Ρ‚ΠΎΠ²Π° Π΅ пСтият пост ΠΎΡ‚ Π½Π°ΡˆΠ°Ρ‚Π° сСрия Π·Π° Quarkus! (ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ нашия ΡƒΠ΅Π±ΠΈΠ½Π°Ρ€ Β«Π’ΠΎΠ²Π° Π΅ Quarkus – Kubernetes native Java Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΒ». Π©Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Β«ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°Β» ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ)

Quarkus: модСрнизация Π½Π° прилоТСнията Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° helloworld ΠΎΡ‚ JBoss EAP Quickstart (ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅)

Π’ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ пост Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ модСрнизацията Π½Π° Java прилоТСния с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Quarkus Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (CDI ΠΈ Servlet 3) Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° helloworld ΠΎΡ‚ рСпозитория Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. ДнСс Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° модСрнизация ΠΈ Ρ‰Π΅ обсъдим Π²ΡŠΠΏΡ€ΠΎΡΠ° Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚.

Π˜Π·ΠΌΠ΅Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° производитСлността Π΅ основна основа Π·Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всяка модСрнизация, Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° са Π²Π°ΠΆΠ½Π° част ΠΎΡ‚ процСса Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° производитСлността. ДнСс Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ инструмСнти Π·Π° ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅, с ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ количСствСно Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ подобрСнията, постигнати Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° модСрнизация Π½Π° Java прилоТСния.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° Quarkus, ΠΎΠ·Π°Π³Π»Π°Π²Π΅Π½ΠΎ Measuring Performanceβ€”How do we measure memory usage?

А ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ просто Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° сравним Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° с Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠ° прилоТСния (JBoss EAP, JAR ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ изпълним Ρ„Π°ΠΉΠ»), ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π² Linux с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° инструмСнтитС pmap ΠΈ ps.

JBoss EAP

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ инстанция Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ JBoss EAP (Π²ΠΆ. Ρ€Π°Π·Π΄Π΅Π»Π° β€žΠ Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° helloworldβ€œ Π² Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ пост) ΠΈ слСд Ρ‚ΠΎΠ²Π° Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° процСса PID (Π² нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ²Π° Π΅ 7268) с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ pgrep -lf jboss
7268 java

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠžΠΏΡ†ΠΈΡΡ‚Π° –a позволява Π΄Π° ΠΈΠ·Π²Π°Π΄ΠΈΠΌ ΠΏΡŠΠ»Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° линия (Ρ‚.Π΅.: $ pgrep -af jboss).

Π‘Π΅Π³Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ PID 7268 Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ps ΠΈ pmap.

Π•Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°:

$ ps -o pid,rss,command -p 7268
PID RSS COMMAND 
7268 665348 java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferI

И Π΅Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°:

$ pmap -x 7268
7268:   java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standa
Address           Kbytes     RSS   Dirty Mode  Mapping
00000000ae800000 1348608  435704  435704 rw---   [ anon ]
0000000100d00000 1035264       0       0 -----   [ anon ]
000055e4d2c2f000       4       4       0 r---- java
000055e4d2c30000       4       4       0 r-x-- java
000055e4d2c31000       4       0       0 r---- java
000055e4d2c32000       4       4       4 r---- java
000055e4d2c33000       4       4       4 rw--- java
[...]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB         3263224  672772  643024

НаблюдавамС стойността Π½Π° RSS ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ JBoss EAP ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΊΠΎΠ»ΠΎ 650 ΠœΠ‘ ΠΏΠ°ΠΌΠ΅Ρ‚.

JAR ΠΏΠ°ΠΊΠ΅Ρ‚

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ JAR ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π²ΠΈΠΆΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» "Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° helloworld Π² JAR Ρ„ΠΎΡ€ΠΌΠ°Ρ‚" Π² Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ пост):

$ java -jar ./target/helloworld-<version>-runner.jar

ΠžΡ‚Π½ΠΎΠ²ΠΎ провСрявамС PID с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° pgrep (Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ описаната ΠΏΠΎ-Π³ΠΎΡ€Π΅ опция -a):

$ pgrep -af helloworld
6408 java -jar ./target/helloworld-<version>-runner.jar

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ps ΠΈ pmap, Π·Π° Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π½ΠΎ сСга Π·Π° процСса 6408.

Π•Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°:

$ ps -o pid,rss,command -p 6408
  PID   RSS COMMAND
 6408 125732 java -jar ./target/helloworld-quarkus-runner.jar

И Π΅Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°:

$ pmap -x 6408
6408:   java -jar ./target/helloworld-quarkus-runner.jar
Address           Kbytes     RSS   Dirty Mode  Mapping
00000005d3200000  337408       0       0 rw---   [ anon ]
00000005e7b80000 5046272       0       0 -----   [ anon ]
000000071bb80000  168448   57576   57576 rw---   [ anon ]
0000000726000000 2523136       0       0 -----   [ anon ]
00000007c0000000    2176    2088    2088 rw---   [ anon ]
00000007c0220000 1046400       0       0 -----   [ anon ]
00005645b85d6000       4       4       0 r---- java
00005645b85d7000       4       4       0 r-x-- java
00005645b85d8000       4       0       0 r---- java
00005645b85d9000       4       4       4 r---- java
00005645b85da000       4       4       4 rw--- java
[...]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB         12421844  133784  115692

ΠžΡ‚Π½ΠΎΠ²ΠΎ провСрявамС RSS ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ JAR ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΊΠΎΠ»ΠΎ 130 ΠœΠ‘.

Изпълним Ρ„Π°ΠΉΠ»

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ нативния изпълним Ρ„Π°ΠΉΠ» (Π²ΠΈΠΆΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» "Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° нативния изпълним Ρ„Π°ΠΉΠ» helloworld" Π² Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ пост):

$ ./target/helloworld-<version>-runner

ΠžΡ‚Π½ΠΎΠ²ΠΎ провСрявамС нСговия PID:

$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner

И слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ получСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° процСса (6948) Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ps ΠΈ pmap.

Π•Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°:

$ ps -o pid,rss,command -p 6948
  PID   RSS COMMAND
 6948 19084 .\/target\/helloworld-quarkus-runner
И Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:
$ pmap -x 6948
6948:   .\/target\/helloworld-quarkus-runner
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000      12      12       0 r---- helloworld-quarkus-runner
0000000000403000   10736    8368       0 r-x-- helloworld-quarkus-runner
0000000000e7f000    7812    6144       0 r---- helloworld-quarkus-runner
0000000001620000    2024    1448     308 rw--- helloworld-quarkus-runner
000000000181a000       4       4       4 r---- helloworld-quarkus-runner
000000000181b000      16      16      12 rw--- helloworld-quarkus-runner
0000000001e10000    1740     156     156 rw---   [ anon ]
[...]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB         1456800   20592    2684

НиС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ RSS ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΠΌΠΈΡΡ‚ Ρ„Π°ΠΉΠ» Π·Π°Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 20 ΠœΠ‘ ΠΏΠ°ΠΌΠ΅Ρ‚.

БравнявамС консумацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚

И Ρ‚Π°ΠΊΠ°, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСднитС числа Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°:

  • JBoss EAP – 650 MB.
  • JAR ΠΏΠ°ΠΊΠ΅Ρ‚ – 130 MB.
  • Изпълним Ρ„Π°ΠΉΠ» – 20 MB.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π΅, Ρ‡Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΠΌΠΈΡΡ‚ Ρ„Π°ΠΉΠ» Π·Π°Π΅ΠΌΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚.

ПодвСТдамС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ постовС 4 ΠΈ 5

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ пост Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ модСрнизацията Π½Π° Java прилоТСния с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΡ‚Π΅, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ ΠΎΡ‚ Quarkus (CDI ΠΈ Servlet 3), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ΠΈ стартиранС Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° прилоТСния. ΠŸΠΎΠΊΠ°Π·Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° информация Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π·Π° Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ подобрСнията, постигнати Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚Π°Π·ΠΈ модСрнизация. Π’Π΅Π·ΠΈ статии ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Quarkus ΠΈ ΠΊΠ°ΠΊΠ²Π° Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ»Π·Π° – нСзависимо Π΄Π°Π»ΠΈ става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° простия helloworld ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-слоТни прилоТСния ΠΎΡ‚ рСалния ΠΆΠΈΠ²ΠΎΡ‚.

Π©Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ слСд Π΄Π²Π΅ сСдмици с финалния пост Π·Π° Quarkus – Π΄ΠΎ скоро!

Π’ нашия Ρ„ΠΈΠ½Π°Π»Π΅Π½ пост Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΠΌ AMQ Online ΠΈ Quarkus, Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ ΠΌΠΎΠ΄Π΅Ρ€Π½Π° систСма Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° OpenShift, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄Π²Π΅ Π½ΠΎΠ²ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π§Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎ Π²Ρ€ΡŠΠ·ΠΊΠ°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster