相关疑难解决方法(0)

成为绩效顾问的主要技能是什么?

如果我想成为Java应用程序和系统的性能顾问,我需要哪些主要技能?

  • Java本身的长期经验
  • 使用分析器(或堆栈镜头)
  • 数据库知识(避免/检测常见的性能错误:索引等)
  • 缓存
  • Java 并发

你是否同意这些的重要性?还有什么要补充的?


答案更新:

额外的技能:

  • 垃圾收集和调整
  • 高效的 Java代码
  • 设计(高级视觉)
  • UI技术(JavaScript,DOM,CSS,Swing,SWT)
  • 网络理解(也用于Ajax)
  • Algorithmics,Big O.
  • 硬件了解扩展

心态(由几个答案提供,虽然我没有要求):

  • 分析(真正衡量)
  • 耐压
  • 人/政治技巧

java performance

6
推荐指数
1
解决办法
736
查看次数

如何对网站进行分析?

我目前有一个django网站,它有点慢,所以我想了解发生了什么.我如何对其进行分析以区分:

  • 网络的影响
  • 我正在使用的托管效果
  • javascript的效果
  • 服务器端执行(python代码)和sql访问的效果.
  • 由于我今晚碰巧遇到的巨大头痛,我没有考虑任何其他影响.

当然,对于其中一些我可以使用firebug,但是一些效果是相关的(例如,javascript可能看起来很慢,因为它正在进行慢速网络访问)

谢谢

django profiling

6
推荐指数
1
解决办法
428
查看次数

Java减少CPU使用率

Greets-

我们在工作中使用了一些喜欢使用的疯子

while(true) { //Code } 
Run Code Online (Sandbox Code Playgroud)

在他们的代码中.你可以想象这会最大化CPU.有没有人知道降低CPU利用率的方法,以便其他人也可以使用服务器.

代码本身只是不断地在互联网上轮询网站上的更新.因此,我想一点睡眠方法会大大降低CPU使用率.

所有操作都在String对象(Java)中进行,任何人都知道StringBuilders会减少多少?

谢谢你的任何指示

java performance cpu-usage

6
推荐指数
2
解决办法
1万
查看次数

在微调性能时,多次调用JavaScript方法的最佳方法是什么?

我一直在研究JavaScript性能.我已经了解到,在不止一次访问时,通常最好将闭包变量和类成员复制到本地范围以加快速度.例如:

var i = 100;
var doSomething = function () {
    var localI = i;
    // do something with localI a bunch of times

    var obj = {
        a: 100
    };
    var objA = obj.a;
    // do something with objA a bunch of times
};
Run Code Online (Sandbox Code Playgroud)

我理解这一点; 它为解释器添加了一个快捷方式,用于按名称查找值.在处理方法时,这个概念变得非常不清楚.起初,我认为它会以同样的方式工作.例如:

var obj = {
    fn: function () {
        // Do something
        return this.value;
    },
    value: 100
};
var objFn = obj.fn
objFn();
// call objFn a bunch of times
Run Code Online (Sandbox Code Playgroud)

事实上,这根本不起作用.访问这样的方法会将其从其范围中删除.当它到达this.value行时,这指的是window对象,this.value可能是未定义的.我可以使用objFn.call(obj)将其范围传回到它中,而不是直接调用objFn和丢失范围,但这是否比原始的obj.fn()更好或更差?

我决定写一个脚本来测试这个,我得到了非常令人困惑的结果.该脚本对多个测试进行迭代,这些测试循环执行上述函数调用多次.每次测试所花费的平均时间输出到身体.

使用许多简单方法创建对象.额外的方法用于确定解释器是否必须更加努力地找到特定方法.

测试1简单地调用this.a(); …

javascript methods performance object call

6
推荐指数
1
解决办法
506
查看次数

以有效的方式逐字节地比较数据(使用C++)

有没有比使用C++列表容器的比较运算符更有效地按字节比较数据的方法?

我要比较[大?10 kByte <size <500 kByte]按字节数量的数据,以验证外部存储设备的完整性.

因此,我按字节顺序读取文件并将值存储在无符号字符列表中.此列表的资源由shared_ptr处理,因此我可以在程序中传递它,而无需担心列表的大小

typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;

contentPtr GetContent( fs::path filePath ){
 contentPtr actualContent (new list< unsigned char > );       
 // Read the file with a stream, put read values into actual content
return actualContent;
Run Code Online (Sandbox Code Playgroud)

这样做了两次,因为文件总是有两个副本.必须比较这两个文件的内容,如果发现不匹配则抛出异常

void CompareContent() throw( NotMatchingException() ){
 // this part is very fast, below 50ms
 contentPtr contentA = GetContent("/fileA");
 contentPtr contentB = GetContent("/fileB");
 // the next part takes about 2secs with …
Run Code Online (Sandbox Code Playgroud)

c++ comparison performance containers stl

6
推荐指数
1
解决办法
1951
查看次数

用于cpu profiling的过滤类是否适用于Java VisualVM?

我想在Java VisualVm(版本1.7.0 b110325)中过滤哪些类是cpu-profiled.为此,我尝试在Profiler - > Settings - > CPU-Settings下将" Profile only classes "设置为我的测试包,这没有任何效果.然后我尝试通过在" 不要分析类 "中设置它们来摆脱所有java.*和sun.*类,这些也没有效果.

这只是一个错误吗?或者我错过了什么?有解决方法吗?我的意思是:

我想这样做主要是为了获得每个方法消耗的CPU的正确百分比.为此,我需要摆脱烦人的测量,例如sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()(约70%).很多用户似乎都有这个问题,例如

java profiler profiling visualvm jvisualvm

6
推荐指数
1
解决办法
5053
查看次数

GDB是否支持"运行时采样",或者是否有用户"扩展"来执行此操作

动机:我不能让google cpu profiler在代码运行的机器上工作(我的最后一口气我诅咒libunwind :)),所以我想知道gdb是否支持高频随机暂停程序执行,存储函数的名称发生中断并计算它在函数x中暂停的次数.这就是我所谓的"运行时采样",可能有更精确/更智能的名称.我查看了oprofile,但它很复杂到a)弄清楚它是否可以做到这一点b)弄清楚如何做它编辑:显然正确的名称是:"统计抽样方法"

编辑2:为什么我为此提供赏金的原因是我在SO上看到一些人推荐手动中断10-20x并用bt检查堆栈...当谈到时间时似乎非常浪费,所以我猜测一些智能ppl自动化它.:)
EDIT3:gprof不会削减它...我最近在ARM系统上尝试运行它并且输出是垃圾...... :(我猜它多线程的麻烦就是这个原因......

profiling gdb

6
推荐指数
1
解决办法
5364
查看次数

分析Java:找出线程花费时间被阻止的位置

我有一个多线程的应用程序,可以很好地扩展,但在16-cpu服务器上运行,一旦我超过5或6个硬件线程,性能水平关闭.我怀疑瓶颈围绕着其中一种同步方法.但是,在开始深入研究代码并尝试用非阻塞算法替换算法之前,我需要确定这是一种有罪的方法.

使用-Xprof参数运行Java 告诉我,正如我预期的那样,线程大部分时间都被阻塞了.有没有办法让我可以分解他们花在特定方法上的时间

java multithreading profiling synchronized

5
推荐指数
1
解决办法
4547
查看次数

为什么我会遇到长时间的非 GC 相关应用程序暂停?

我一直在 GC 日志中看到非常长的应用程序暂停,这些暂停似乎与垃圾收集无关。该应用程序位于 16GB 堆上,分配的内存吞吐量非常大。我知道 GC 日志会显示与 GC 不一定相关的暂停,这里似乎就是这种情况。

此外,在这些暂停期间,CPU 达到 100%,没有磁盘或内存 I/O,也没有日志记录活动(由于所有应用程序线程都被停止)。

关于什么可能导致这些长时间停顿的任何想法,或者关于如何追踪根本原因的任何建议?

这是日志中的相关片段(注意 151 秒的暂停):

2015-04-21T06:30:04.834-0500: 217179.483: [GC (Allocation Failure)2015-04-21T06:30:04.849-0500: 217179.483: [ParNew
Desired survivor size 43614208 bytes, new threshold 6 (max 6)
- age   1:   19876896 bytes,   19876896 total
- age   2:   15903904 bytes,   35780800 total
- age   3:     617120 bytes,   36397920 total
- age   4:      34096 bytes,   36432016 total
- age   5:     399896 bytes,   36831912 total
- age   6:      71112 bytes,   36903024 total
: 706301K->45145K(766784K), 0.0681632 secs] …
Run Code Online (Sandbox Code Playgroud)

java memory performance garbage-collection

5
推荐指数
1
解决办法
857
查看次数

如何分析 Java 中的阻塞代码 – 测量执行时间而不是 CPU 时间

我正在尝试分析经常在数据库和休息调用中阻塞的情况。该代码不受 cpu 限制。以下示例 junit 方法应该可以说明该问题:

@RepeatedTest(10)
void fast() throws InterruptedException {
    Thread.sleep(100);
}

@RepeatedTest(10)
void slow() throws InterruptedException {
    // imagine a slow database or rest call or any other blocking code
    Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 IntelliJ 和 Java Flight Recorder。我预计该方法fast将使用大约 10% 的执行时间,而该方法slow将使用大约 90% 的执行时间。但它们根本没有被报告,因为它们不占用 CPU 时间。

如何分析实际执行时间(包括阻塞代码中的等待时间而不仅仅是 CPU 时间)?

java profiling jfr

5
推荐指数
1
解决办法
871
查看次数