小编Arn*_*len的帖子

分析(可能是I/O绑定)进程以减少延迟

我想在更大的应用程序中改进特定方法的性能.

目标是改善延迟(在特定功能中花费的挂钟时间),而不是(必要的)系统负载.

要求:

  1. 我预计很多延迟都是由I/O引起的,考虑到等待/阻塞所花费的时间(换句话说:查看挂钟时间而不是CPU时间)
  2. 因为程序比我想要优化的片段做得更多.需要有一种方法可以以编程方式启动/停止分析,或者过滤输出以仅显示进入和退出我正在优化的功能之间的时间.
  3. 方法级别的分析是可以接受的(如果它可以在指令级别上完成,甚至更好.如果它只分析系统调用,那可能是不够的)
  4. 这是一个爱好项目,所以昂贵的工具不是一个真正的选择
  5. 仪表(-finstrument-functions)是可以接受的
  6. 我感兴趣的关键代码很难手动中断(因为它已经相对快速且难以在循环中实际调用),因此需要某种自动化.

迄今为止丢弃的工具:

  • gprof,oprofile,callgrind(要求1)
  • 使用getrusage建立自定义的东西(要求1)
  • poormansprofiler.org(要求2)
  • strace -T,dtrace,http://perf.wiki.kernel.org(要求2和3)
  • VTune,Zoom(要求4)
  • 手动调用堆栈采样(要求6)
  • google-perftools(应该能够测量墙壁时间,但这似乎不适用于我的情况,大概是因为SIGALRM干扰.
  • systemtap(我的内核没有打包包含utrace)

我尚未进一步评估的其他选项:

  • cprof(这里没有开箱即用,似乎只有i386)
  • 手动插入跟踪点(例如,使用lttng)

我很想知道:

  • 其他选择
  • 也许我太早丢弃了一些工具?
  • 我尚未评估的选项是否有可能发挥作用,如果是的话,如何做到最好.

我终于安顿下来了:

这个粗糙工具产生的痕迹很难解释,我可以很容易地想象一些工具来进一步处理它的输出,使它更加有用.但是,这对我来说现在已经完成了这项工作,所以我把这个项目放到了以后;).

linux performance trace profiling sampling

10
推荐指数
1
解决办法
3107
查看次数

go 应用程序的 pprof CPU 配置文件未显示任何示例

我正在使用 pprof 分析 Go 应用程序。

该应用程序使用了大约 4-10% 的 CPU,并让它运行一小段时间,生成大约 6-11kb 的配置文件。这对我来说意味着它应该能够对某些活动进行采样。

然而,当我查看结果时,我看到以下内容:

$ go tool pprof --text bigproc
1.77s of 1.77s total (  100%)
      flat  flat%   sum%        cum   cum%
     1.77s   100%   100%      1.77s   100%
$
Run Code Online (Sandbox Code Playgroud)

有趣的信息似乎缺失了。可能出什么问题了?

这是在 Linux 上,使用 google-perftools 的 go 版本 1.6.1 和 pprof 版本 2.2.1(如果重要的话)。

performance profiling go pprof

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

如何从 Scala 对象使用 SBT IntegrationTest 配置

为了使我们的多项目构建更易于管理,我们将 Build.scala 文件拆分为几个文件,例如 Dependencies.scala 包含所有依赖项:

import sbt._

object Dependencies {
  val slf4j_api = "org.slf4j" % "slf4j-api" % "1.7.7"
  ...
}
Run Code Online (Sandbox Code Playgroud)

我们想在我们的构建中添加集成测试。根据我们添加的SBT 文档

object Build extends sbt.Build {
  import Dependencies._
  import BuildSettings._
  import Version._
  import MergeStrategies.custom

  lazy val root = Project(
    id = "root",
    base = file("."),
    settings = buildSettings ++ Seq(Git.checkNoLocalChanges, TestReport.testReport)
  ).configs(IntegrationTest).settings(Defaults.itSettings: _*)
  ...
}
Run Code Online (Sandbox Code Playgroud)

其中 Dependencies、BuildSettings、Version 和 MergeStrategies 是在它们自己的文件中定义的自定义 Scala 对象。

按照文档,我们要为 Dependencies.scala 中的 IntegrationTest 配置添加一些依赖项:

import sbt._

object Dependencies {

  val slf4j_api = "org.slf4j" % "slf4j-api" …
Run Code Online (Sandbox Code Playgroud)

integration-testing scala sbt

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

习惯使用sbt来释放(测试过的)工件

我想用sbt来发布我的项目.

我已经习惯了maven,需要一些帮助(精神上)过渡.

默认情况下,我认为'publish'取决于'package',但'package'不依赖于'test'.当然我只想发布经过测试的代码.我应该如何确保这一点?

当然我可以让包依赖于测试,但事实上这不是默认的类型,这表明这不是sbt的习惯用法.实现这一目标的"正确"方法是什么?

如何找到有关最佳实践的更多信息?

scala sbt

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

如何在“sbt new”中指定一个分支?

使用sbt new 时,我可以根据包含gter8模板的 github 项目的默认分支初始化一个新项目。

是否还可以使用来自默认分支以外的分支的模板?

scala github sbt giter8

4
推荐指数
1
解决办法
393
查看次数

执行Maven发布; 构建环境字段在Hudson项目的配置中没有出现

我是Hudson/Jenkins的新手,我正在跟随jenkins.pdf的持续集成.我想要执行maven发布.为了做到这一点,本书说,应该安装Hudson M2 Extra步骤插件和M2release插件.我做了所有这些部分但至少要配置Maven发布版本,"构建环境"部分应该出现在Project的配置中不存在.在哪里我犯了错误.帮我.

hudson maven-release-plugin jenkins jenkins-plugins

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

无需完全 root 访问权限即可读取 /proc/<pid>/fd/<fd>

我有一个程序(https://github.com/raboof/connbeat),它依赖于/proc/[pid]/fd/*查找给定(网络)inode 的进程。

/proc/[pid]/fd只能由 root 读取,但为了安全起见,我想尽可能地放弃权限。

有没有什么方法可以(有效地)获得进程和索引节点之间的关系,而不需要完全的 root 权限?也许我可以有选择地授予某些系统调用使用功能的访问权限?

linux security root linux-kernel linux-capabilities

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