- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了很多时间试图找出导致我的应用程序运行非常缓慢的原因,也许有人会帮助我检查问题所在。
版本:
spring mvc: 4.2.5.RELEASE
hibernate :4.3.11.Final
spring-data-jpa: 1.8.2.RELEASE
野蝇:10
PostgreSQL 服务器:9.4
操作系统:Debian GNU/Linux 7.9 (wheezy)
服务器配置:VPS,1 个进程,4GB RAM
关于我的应用:
带有静态 JSP
登录页面、信息页面和重定向到私有(private)区域的登录的简单 Web 应用程序。公共(public)页面是静态的,首先在登录期间查询数据库,然后尝试获取已登录用户的内容。
问题是什么:
当我浏览配置如下的页面时:
<http auto-config="true">
<intercept-url pattern="/" access="permitAll"/>
<intercept-url pattern="favicon.ico" access="permitAll"/>
<intercept-url pattern="/login/**" access="permitAll"/>
<intercept-url pattern="/info" access="permitAll"/>
...
</http>
没问题,一切都在他飞行中加载,没有停顿。它工作顺利。当我在/login 上发帖(将我重定向到/main),然后当我在每个这样配置的网站上导航时:
<intercept-url pattern="/main/**" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/statistic/**" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
有一些极端的延迟,有时甚至长达 1 分钟。
hibernate 配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Configure the entity manager factory bean -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="pl.portal.model"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="jpaProperties">
<props>
<!-- <prop key="hibernate.dialect">pl.portal.sql.ProjectPsqlDialect</prop> -->
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">false</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
<prop key="hibernate.connection.characterSet">UTF-8</prop>
</props>
</property>
</bean>
任何人都可以提示我如何确定导致延迟的原因吗?在我的浏览器中检查 webinspect ->/admin,大小 7,89KB,大小:54 秒(每个 js 或 css 不超过 100 毫秒)
编辑2:删除了线程转储的无效片段,粘贴了在应用程序上调用操作 /admin
后启动的线程的完整转储。线程耗时 61s
最佳答案
造成这种延迟的原因有很多,下面列出了一些最常见的原因。
网络延迟 在您的情况下可以排除网络服务器和客户端之间的问题,因为您提到静态页面和页面资源(如 CSS)的服务器响应时间以毫秒为单位。
对于其他事情,VisualVM 等远程管理系统是找出导致延迟的原因以及哪个进程占用大量 CPU 时间的最佳工具。您也可以使用 JProfiler 等商业分析器,但 VisualVm 也可以完美地完成这项工作。
要连接到 ViusalVM,您需要访问您的服务器并添加 JMX options在 JAVA_OPTS 或您选择的任何位置并重新启动 Web 应用程序。
等待锁定的线程 - 可能有一段代码中有一个同步方法锁定静态字段。如果该方法让我们假设处理数据库查询大约需要 5 秒。并且有 10 个请求在排队。然后最后一个请求将在 50 秒或更长时间内处理。
如何检测这种瓶颈情况?
你可以遍历代码,找出所有获取锁的地方,并添加一些调试日志。但是,如果问题不在您的代码中并且可能是由某些第三方库引起的怎么办?
我曾经遇到过这样一种情况,当日志文件滚动时,Logger(log4j 库)会阻塞所有线程(大约 10 秒)。代码审查无法检测到这种情况。
分析器来拯救。VisualVM 可能是检测线程锁定引起的延迟的最佳分析器。这是您可以执行的操作。
CPU 密集型任务 - 如果进程占用大量 CPU 时间,它也会导致延迟。同样,您可以使用 VisualVM 的采样器 并找出哪个线程占用的 CPU 时间最多。
希望这能帮助您找到延误的原因!
关于performance - spring mvc + wildfly + postgresql 性能调优,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954036/
我想保护托管在我的 Widlfly AS 上的一些 ejb,所以我开始创建我的安全域。我不想在 ApplicationRealm 上进行身份验证,所以我定义了我的安全领域并将其指向我的安全域。我想将凭
我在 Wildfly 10 上有一个 Web 应用程序 并且在 Web 应用程序目录中,我放置了一个 zip 文件,当用户单击超链接时我想下载该文件。 在我的用户界面上 片段 ','_self')">
我们正在使用 wildfly,在我们的 wildflyhome/standalone/log 目录中,它充满了日志并最终耗尽了磁盘空间。我想设置滚动日志并且知道这是可能的,但只是不知道该怎么做。任何帮
是否可以在 WildFly 10 中配置压缩日志? 无法在此处找到正确的配置: https://docs.jboss.org/author/display/WFLY10/Handlers 最佳答案 日
在开发过程中,我希望能够在 Web 应用程序打开时运行我的 arquillian 测试。两者都使用不同的 WildFly 实例: 我的 Arquillian 测试使用托管(甚至嵌入式)wildfly
我想编写一个脚本来管理 WildFly 启动和部署,但我现在遇到了麻烦。要检查服务器是否已启动,我找到了命令 ./jboss-cli.sh -c command=':read-attribute(na
我们在旧版本中使用 -b 0.0.0.0 来完成此操作。但是当我们在 WildFly 中设置这个地址时,它会失败。在 WildFly-8.2 中执行此操作的替代方法是什么? 最佳答案 按以下方式更改您
在 WildFly 13 中禁用管理控制台的正确方法是什么?我在 http-interface 上设置了 console-enabled="false" 属性,但运行 WildFly 13 后我仍然看
我想向 STOMP 客户端公开我的 WildFly 服务器,但我还没有找到任何最近的样本。据我了解,最近 WildFly 版本中的所有通信都通过单个套接字(默认情况下监听 8080)。我需要更改任何配
我想将 Wildfly 服务器的日志子系统用于我的应用程序。在一些在线博客的帮助下,我在 standalone.xml 中为我的应用程序添加了一个日志配置文件。
从 JBoss 5.1 升级到 WildFly 8.2 后,我收到了下一个错误日志。同时 - 所有工作都有效。 2015-07-13 18:28:35,201 EJB default - 2 ERRO
在 WildFly 13 中禁用管理控制台的正确方法是什么?我在 http-interface 上设置了 console-enabled="false" 属性,但运行 WildFly 13 后我仍然看
我有一个在 Wildfly 8.0.0 Final 上运行的 JavaEE 应用程序。 应用程序使用了很多图像,我不想将它们存储在数据库中,因此将它们写入硬盘。 如何配置 Wildfly/Undert
我之前在 Glassfish 上有过一些代码,但我想将它移植到 WildFly。 但是,我似乎无法让 WildFly 调用该模块。 ServletContextListener初始化模块如下 Auth
Wildfly 和 Java 的初学者,如果这个问题非常基础,我深表歉意。任何帮助将不胜感激。 备注: 启动 Wildfly 服务器没有任何问题。 问题: 我正在尝试从以下位置开始 hello wor
Wildfly 和 Java 的初学者,如果这个问题非常基础,我深表歉意。任何帮助将不胜感激。 备注: 启动 Wildfly 服务器没有任何问题。 问题: 我正在尝试从以下位置开始 hello wor
我正在尝试将 JMC 连接到在 Windows8 机器上作为服务运行的 WildFly,但是当我打开 JMC 时,它不显示正在运行的 Wildfly,只显示运行 jmc 的 jvm。尝试以这种方式连接
有没有人有使用 CLI 在 Wildfly 中设置消息传递子系统的示例脚本? 一个完美的例子是 CLI 需要使用一个运行 standalone.xml 的服务器,在运行 CLI 脚本之后,它有一个在
在 NetBeans 下运行的 WildFly 8.1.0.Final 安装中,我不断收到以下看似随机的错误: 08:51:09,742 ERROR [io.undertow.request] (de
在 Wildfly 11 中部署 test.war 期间,我看到了一些警告: 09:45:32,714 WARN [org.jboss.weld.Validator] (MSC service th
我是一名优秀的程序员,十分优秀!