Hosting for Java Web App
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Hosting for Java Web App
Лапша в микросервисах - проблема архитектора, а не микросервисов. У таких архитекторов обычно еще проблема с NoSQL, т.к. джойны не работают.
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Отцы, куда-то вас не туда понесло. Мне нужны не resful микросервисы а вполне обычная веб аппка. Чесно скажу,что засовывать application server в аппку звучит сильно через жопу...
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
![Surprised :o](./images/smilies/mega_shok.gif)
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Hosting for Java Web App
отцы плохого не посоветуют! прежде чем возмущаться ты попробуй и зацени простоту, изящность и гибкость данного подхода. Он непросто так набрал популярность на рынке.Montchik wrote: 08 May 2018 19:34 Отцы, куда-то вас не туда понесло. Мне нужны не resful микросервисы а вполне обычная веб аппка. Чесно скажу,что засовывать application server в аппку звучит сильно через жопу...![]()
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
твой UI должен какимто образом разговаривать с бакэндом, и если не через rest/json то как? не jsp же?
в springBoot для простоты весь UI можно поместить в то же проект в одно из след мест
src/main/resources/META-INF/resources/index.html
src/main/resources/resources/index.html
src/main/resources/static/index.html
src/main/resources/public/index.html
java -jar your.jar поднимет и UI и бакенд на любом клауде, машине, VM - ну куда проще то
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM и почему-то продолжара отжирать даже в idle пока gc не случился. Не нравится мне это ибо если хостить в облаке, то за каждую лишнюю сотню мегов придется платить...
Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
Надо теперь попробовать cradle и embedded jetty со спринг бутом.
Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
Надо теперь попробовать cradle и embedded jetty со спринг бутом.
Code: Select all
package hello;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
Code: Select all
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------< net.montchik.springboot.poc:maven >------------------
[INFO] Building maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:3.0.2:tree (default-cli) @ maven ---
[INFO] net.montchik.springboot.poc:maven:jar:0.0.1-SNAPSHOT
[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] +- org.springframework.boot:spring-boot-starter:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] | | | +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] | | | \- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile
[INFO] | | | \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile
[INFO] | | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] | +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] | +- org.springframework:spring-core:jar:5.0.6.RELEASE:compile
[INFO] | | \- org.springframework:spring-jcl:jar:5.0.6.RELEASE:compile
[INFO] | \- org.yaml:snakeyaml:jar:1.19:runtime
[INFO] +- org.springframework.boot:spring-boot-starter-json:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.5:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.5:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.5:compile
[INFO] | \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.5:compile
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.31:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.31:compile
[INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.31:compile
[INFO] +- org.hibernate.validator:hibernate-validator:jar:6.0.9.Final:compile
[INFO] | +- javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
[INFO] | \- com.fasterxml:classmate:jar:1.3.4:compile
[INFO] +- org.springframework:spring-web:jar:5.0.6.RELEASE:compile
[INFO] | \- org.springframework:spring-beans:jar:5.0.6.RELEASE:compile
[INFO] \- org.springframework:spring-webmvc:jar:5.0.6.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:5.0.6.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:5.0.6.RELEASE:compile
[INFO] \- org.springframework:spring-expression:jar:5.0.6.RELEASE:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.453 s
[INFO] Finished at: 2018-05-09T21:53:50-05:00
[INFO] ------------------------------------------------------------------------
-
- Уже с Приветом
- Posts: 1349
- Joined: 28 Nov 2008 17:50
Re: Hosting for Java Web App
ручки кривые или не туда смотришь. jre 1.8 без ничего сразу должно 124 мб отжирать. с веб сервером и хибером под 200. смысла в облаке эти пару байт экономить нет никакого, все равно даже микро образы идут с 1GMontchik wrote: 10 May 2018 04:13 Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Hosting for Java Web App
народ не расслабился, народ внимательно следит за класспасс и удаляет оттуда весь ненужный мусор используя exclusions.Montchik wrote: 10 May 2018 04:13 Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
если с бутом выгорит советую добавить actuator
эта депенденси добавляет REST API через который можно смотреть много интересной внутренней инфы про жвм, проперти, окружение, и даже логи.
Имеется бесплатная тулза которая визиализирует всю эту служебную инфу
https://github.com/codecentric/spring-boot-admin
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Причем здесь ручки? Я пример с спринг-бута забрал и запустил как в ихнем reference написано, никакой отсебятины.iDesperado wrote: 10 May 2018 06:17ручки кривые или не туда смотришь. jre 1.8 без ничего сразу должно 124 мб отжирать. с веб сервером и хибером под 200. смысла в облаке эти пару байт экономить нет никакого, все равно даже микро образы идут с 1GMontchik wrote: 10 May 2018 04:13 Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM
![HBZ :pain1:](./images/smilies/pain25.gif)
Кстати, 120MB heap usage было до первого minor GC, потом устаканилось на следующем.
Tomcat/Maven:
Heap: 83MB
Meta: 48MB
27 Threads
Не поленился и запустил в cmd следующий HelloWorld,
Code: Select all
package hello;
public class HelloWorld {
public static void main(String[] args) throws Exception {
System.out.println("Hello World!");
while (true){
Thread.sleep(2000);
}
}
}
Heap: 9MB
Meta: 800KB
10 threads
OS RAM: 15MB
Ну и где тут "jre 1.8 без ничего сразу должно 124 мб отжирать", мистер специалист по кривым ручкам?
![funny :funny:](./images/smilies/lol.gif)
FYI - how to check jvm heap size params:
Code: Select all
C:\Projects\SpringBootPOC\plain>java -XX:+PrintFlagsFinal -version | findstr HeapSize
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 65011712 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1040187392 {product}
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Спасибо, посмотрю.valchkou wrote: 10 May 2018 16:35народ не расслабился, народ внимательно следит за класспасс и удаляет оттуда весь ненужный мусор используя exclusions.Montchik wrote: 10 May 2018 04:13 Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
если с бутом выгорит советую добавить actuator
эта депенденси добавляет REST API через который можно смотреть много интересной внутренней инфы про жвм, проперти, окружение, и даже логи.
Имеется бесплатная тулза которая визиализирует всю эту служебную инфу
https://github.com/codecentric/spring-boot-admin
![we are friends :fr:](./images/smilies/druzja.gif)
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Запустил спринг бут SampleController пример с помошью gradle и вот что получил:
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!![Smile :-)](./images/smilies/smile.gif)
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!
![Smile :-)](./images/smilies/smile.gif)
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Hosting for Java Web App
правильней было бы сбилдить жар и запускать его, тогда результат скорее всего будет одинаков. На продакшн ведь жар идет а не тулзаMontchik wrote: 11 May 2018 04:46 Запустил спринг бут SampleController пример с помошью gradle и вот что получил:
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!![]()
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Hosting for Java Web App
Мне это уже анекдот напоминает ))
Купили как-то суровым сибирским лесорубам японскую бензопилу.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
Купили как-то суровым сибирским лесорубам японскую бензопилу.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Hosting for Java Web App
По теме. В чем сакральный смысл данных тестов? Spring Boot нацелен на упрощение процесса разработки. Не на супер перфоманс из коробки. Разрабатывать стало реально быстрее и проще. У меня в продакшене уже несколько сотен апок в AWS на бинсталке и в Хероку. Весь web-контент внутри. В некоторых случаях даже JNI либы внутри. Если у меня начинаются проблемы с GC, я просто добавляю еще инстансов и проблемы уходят. Понятно, что это не отменяет оптимизацию, но это точно не то с чего я начинал бы. Просто жизненный цикл софта с каждым годом все короче и короче.
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Логично, но я почему-то думал что тулза просто стартует jvm и запускает в ней jar. Попробую jetty вместо томката для сравнения.valchkou wrote: 11 May 2018 19:01правильней было бы сбилдить жар и запускать его, тогда результат скорее всего будет одинаков. На продакшн ведь жар идет а не тулзаMontchik wrote: 11 May 2018 04:46 Запустил спринг бут SampleController пример с помошью gradle и вот что получил:
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!![]()
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Спасибо за пояснение. А тест драйвлю я спринг бут чтобы убедиться что это действительно for real, а не очередная глюкавая хрень якобы могущая делать все что надо и под эту тему жрущая ресурсы как не в себя. За хостинг платить придется из собственного кармана.tessob wrote: 12 May 2018 07:50 По теме. В чем сакральный смысл данных тестов? Spring Boot нацелен на упрощение процесса разработки. Не на супер перфоманс из коробки. Разрабатывать стало реально быстрее и проще. У меня в продакшене уже несколько сотен апок в AWS на бинсталке и в Хероку. Весь web-контент внутри. В некоторых случаях даже JNI либы внутри. Если у меня начинаются проблемы с GC, я просто добавляю еще инстансов и проблемы уходят. Понятно, что это не отменяет оптимизацию, но это точно не то с чего я начинал бы. Просто жизненный цикл софта с каждым годом все короче и короче.
Горизонтальное скалирование системы не всегда возможно, хотя для веба наверное это не проблема. Не уловил связи межцу укорачиванием жизненного цикла софта и веб хостингом.
![HBZ :pain1:](./images/smilies/pain25.gif)