Tag: profiling

VisualVM无法取样内存

我有一个配置了JMXRemote参数的tomcat实例。 本地VisualVM能够在CPU上获取采样器,但不能用于内存。 内存按钮显示为灰色,上面写着:“内存采样:不可用。无法连接到目标应用程序。请确保应用程序在受支持的JDK 6或JDK 7上运行” JMXRemote参数: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false Tomcat JDK版本: JDK1.6.0.30 VisualVM版本: Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e System: Windows Server 2008 R2 (6.1) , amd64 64bit Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode) Vendor: Sun Microsystems Inc., http://java.sun.com/ Environment: Cp1252; en_US (visualvm) Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7 Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm […]

如何在Swing中分析EDT?

我有一个应用程序,我正在Swing中构建。 它有一个可滚动和可缩放的图表组件,我可以平移和放大。整个过程是顺利的,除了有时UI将暂停约750毫秒,我不知道为什么。 这并不总是会发生 – 但有时在应用程序中会发生某些事情,并且每隔6-8秒就开始暂停一次。 很明显,EDT上有一些事件需要750毫秒才能运行,这不应该发生。 我如何具体地描述EDT? 我真正想要做的是每当事件在EDT上运行时,将事件所花费的总时间量输出到日志或System.out。 有没有办法做到这一点? 或者是否有一些工具可以为我做这个并给我一个在EDT上运行的所有内容的日志以及需要多长时间? 我想通过这个日志,查看花费很长时间的所有内容,并找到问题所在。

VisualVM:CPU /内存分析器停留在“连接到目标JVM ……”

我最近重新安装了Windows,我使用的是内置VisualVM的JDK 1.8 u91。 我已经检查了我的代理设置,以确保它们都在Windows代理设置和VisualVM的代理设置中全部关闭。 我也尝试重新安装JDK,重新启动计算机,重新安装Windows。 我只安装了一个JDK,并且类路径设置为Windows中的JDK bin文件夹。 除了CPU和内存分析之外的所有function都在VisualVM中工作。 我的应用程序是从IntelliJ运行的,但我也尝试从命令行定期运行应用程序,VisualVM也无法连接到那些应用程序。 我也试过从http://visualvm.java.net下载VisualVM,这也不起作用。 我没有安装插件。 它为什么挂? 这是新JDK引入的错误吗?

我代码中的某个无限循环

我有这个Java游戏服务器,可以处理多达3,000个tcp连接,每个播放器,或者每个tcp连接都有自己的线程,每个线程都是这样的: public void run() { try { String packet = “”; char charCur[] = new char[1]; while(_in.read(charCur, 0, 1)!=-1 && MainServer.isRunning) { if (charCur[0] != ‘\u0000’ && charCur[0] != ‘\n’ && charCur[0] != ‘\r’) { packet += charCur[0]; }else if(!packet.isEmpty()) { parsePlayerPacket(packet); packet = “”; } } kickPlayer(); }catch(IOException e) { kickPlayer(); }catch(Exception e) { […]

Android GPU分析 – OpenGL动态壁纸很慢

我正在使用OpenGL ES 3.0开发动态壁纸。 我根据http://www.learnopengles.com/how-to-use-opengl-es-2-in-an-android-live-wallpaper/上的优秀教程进行设置,调整GLSurfaceView并在里面使用它动态壁纸。 我对OpenGL / GLSL最佳实践有很好的了解,并且我已经设置了一个简单的渲染管道,其中绘制循环尽可能紧密。 没有重新分配,使用一个静态VBO用于非变化数据,一个动态VBO用于更新,仅使用一个绘制调用,在着色器等中没有分支。 我通常会获得非常好的表现,但在看似随机但又重复的时候,帧速率会下降。 使用屏幕栏进行分析可以得到黄色条(“等待命令完成”)射击的间隔,并将所有内容都高于关键的60fps阈值。 我已经阅读了任何关于剖析和解释我可以得到的数字的资源,包括这里非常深入的SO问题 。 然而,该问题的主要内容似乎是黄色条表示等待阻塞操作完成所花费的时间,以及帧依赖性 。 我不相信我有任何这些,我只是在每一帧画出一切。 没有阅读 。 我的问题很广泛 – 但我想知道什么事情会导致这种类型的帧率下降,以及如何推进这个问题。 以下是可能会或可能不会产生影响的一些细节: 我正在按需渲染,onOffsetsChanged是触发器(脏时渲染)。 有一个单一纹理(仅创建并绑定一次),1024×1024 RGBA。 用普通的vec4替换一个texture2D调用似乎有助于删除一些帧率下降。 将纹理大小减小到512×512对性能没有任何帮助。 着色器并不复杂,如前所述,不包含分支。 场景中没有太多数据。 只有约300个顶点和一个纹理。 systrace没有显示可疑方法 – GL相关方法(如缓冲区填充和状态调用)不在列表的顶部。 更新:作为一个实验,我试图只渲染每一个帧 ,而不是每次onOffsetsChanged(向左/向右滑动)请求渲染。 这对于外观和感觉来说太可怕了,但几乎完全摆脱了黄色的滞后尖峰。 这似乎告诉我,每帧做60个请求太多了,但我无法弄清楚为什么。

石英多次执行后,Java Excel POI停止

我想对此有一些见解。 我有一个程序,可以从数据库读取和写入excel文件。 它的执行基于使用Quartz api的计时器,并在每周的每周二触发。 问题是,当我通过安排它每小时执行一次作业来测试它时,程序在编写excel文件的过程中几次执行后突然停止。 这是我写的excel代码。 try { FileInputStream file = new FileInputStream(excelFile); POIFSFileSystem myFileSystem = new POIFSFileSystem(file); HSSFWorkbook workbook = new HSSFWorkbook(myFileSystem); HSSFSheet worksheet = workbook.getSheetAt(0); this.cellStyle00 = workbook.createCellStyle(); HSSFDataFormat df = workbook.createDataFormat(); this.cellStyle00.setDataFormat(df.getFormat(“00”)); for(int i = 0;i<Access.size();i++){ AccessorMethods SetGet = (AccessorMethods) InstlibAccessor.get(i); HSSFRow row = worksheet.createRow(worksheet.getPhysicalNumberOfRows()); HSSFCell cell = row.createCell(0); cell.setCellValue(new Double(SetGet.getOne())); cell.setCellStyle(cellStyle00); […]

Java VisualVM不显示/列出我的tomcat java进程

我使用的是jdk64 ,我的java版本是1.6.0_24 。 我在Windows Server 2008上以管理员身份运行这两个(Tomcat java进程和VisualVM)进程。 Tomcat与-Xmx7196m运行,其中jvisualvm与-Xms24m和-Xmx256m一起运行。 这可能是原因吗?

如何设置Eclipse TPTP

我需要为客户分析一个java应用程序。 这是一个eclipse / maven项目,所以我决定使用eclipse TPTP( http://www.eclipse.org/tptp )。 我尝试通过标准eclipse安装中的更新管理器安装eclipse TPTP,但我放弃了,因为令人难以置信的复杂设置和下载具有非常神秘的名称的依赖项。 然后我从http://www.eclipse.org/tptp/home/downloads/?ver=4.5.1下载了“all in one TPTP 4.5.1”软件包,但是当我启动它时会弹出一个错误说“eclipse可执行程序启动程序无法找到它的伴随共享库”。 我正在运行Windows XP,Sun Java 1.5,并在解压缩的eclipse TPTP安装中单击“eclipse.exe”。 我需要做些什么才能让eclipse运行TPTP?

Java VisualVM为CPU分析提供了奇怪的结果 – 还有其他人遇到过这种情况吗?

我已经编写了这个小型(并且非常低效)的类,并希望使用Java VisualVM对其进行概要分析。 public class Test { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br.readLine(); int n = Integer.parseInt(args[0]); int fib = fib(n); System.out.println(fib); } private static int fib(int n) { if (n < 2) { return n; } return fib(n-1)+fib(n-2); } } 结果很奇怪。 调用ConnectionHandler.run()完全控制了结果。 (98.2%)sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run() (1.7%)java.lang.Thread.join(长) […]

Java VisualVM在OOME上启用堆转储

根据文档,当应用程序遇到OutOfMemoryException时,可以自动进行堆转储。 OutOfMemoryException过程刚刚从左侧菜单中消失。 这个function在VisualVM中如何工作? 谢谢。 C:\ work \ temp> java -XX:HeapDumpPath = c:/work/temp/file.hprof -XX:+ HeapDumpOnOutOfMemoryError -jar example.jar