我需要在C/C++程序中检索进程信息.我至少需要基本的东西,如CPU%和内存使用,但其他细节也很有用.
问题是我需要在便携式程序中使用这些信息,该程序将在多个平台上运行:windows,linux,MAC和Solaris.
是否有可以使用的库或者我需要为不同的平台编写自己的HAL?我试着看谷歌,但我看不出任何明显的东西.
我们的工具在诊断模式下生成性能日志,但是我们跟踪代码执行时间(秒表+毫秒)的性能.
显然它根本不可靠,测试系统的CPU可以被一些随机过程使用,如果你的工具配置为运行10个线程而不是2个,结果将完全不同,等等.
我的问题是:
找出一段代码(而不是整个过程)的正确CPU时间的正确方法是什么?
我的意思是CPU时间:
基本上CPU花了多少周期.我假设对于同一台计算机中的同一段代码,它将始终相同,并且不受其他进程的影响.我可能会在这里遗漏一些基本的东西,如果是这样,请在评论或答案中启发我.
PS在我们的设置中无法使用分析器
另一个更新,
为什么我不打算使用分析器
因为我们需要在具有不同数据的不同环境中测试代码,而我们没有分析器或IDE或类似的东西.因此代码本身应该处理它.一个极端的选择可能是使用分析器的DLL,但我不认为这个任务需要这么复杂的解决方案(假设没有免费且易于实现的分析库).
我试图从三星Galaxy Tab GT-P1000读取多个传感器,相对于我使用的应用程序,它们似乎相当糟糕地占用了CPU.
作为测试,我创建了一个简短的程序,它实现了Accelerometer传感器的SensorEventListener,但对传感器读数没有任何作用:
public class SensorTestActivity extends Activity implements SensorEventListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SensorManager oSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
oSensorManager.registerListener(this, oSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
这导致我在调试时(即我的设备已插入我的PC)10%的CPU使用率和5%的使用率而我不是.如果我使用SENSOR_DELAY_FASTEST,那么在我调试时,使用率会持续增长30%,而在我调试时则增长20%.
当我想使用多个传感器时,这会产生一个大问题,因为它们都具有高CPU使用率且没有任何数据处理.我已经使用了Android Market的Compass应用程序,并且他们在给定时间都没有使用超过5%的CPU,所以我觉得我错过了一些明显的东西,但找不到其他人有同样的问题.
我没有为这个应用程序编辑清单文件或布局 - 它是Eclipse制作的默认模板,我添加了传感器.
更新:我读取CPU使用率的方法存在缺陷,因为我正在使用任务管理器来测量它.我的应用程序不是在任务管理器打开时使用onPause停止传感器,而大多数其他应用程序会这样做.
我的Web服务器偶尔会遇到HTTPD请求,这会导致CPU使用率上升.我在Top看这个.每次请求时都会动态生成每个URL.该框架是Codeigniter.我在Linux CentOS上使用prefork Apache作为我的Web服务器.
如何在CPU使用率达到峰值时找出正在处理的URL?我可以以某种方式将进程ID与Apache日志中的HTTP请求相关联吗?网站上有数百万个页面,因此查看Codeignitor的分析器并没有帮助.
我有一个php 5.4/ mysql每天5万次点击的网站,有一个Linux服务器上运行nginx和php-fpm.数据库位于单独的服务器上.
我注意到,在高峰时段,我的网络服务器负载最多为15,而四核处理器则为4.我用php xdebug和xhprof描述了我的php应用程序,并看到,90%的CPU工作是由htmlspecialchars()Twig我用来显示数据的模板中的函数完成的.htmlspecialchars()每页有时会有100到1000个电话.我试图减少无法逃避,但仍然无法避免.
有什么方法可以减少htmlspecialchars()功能的CPU使用率吗?也许在PHP中存在某种缓存?还是有另一种方式?
我正试图解决一个客观类型的问题,来检查.我实际上不知道正确的答案,也不知道如何得到它,需要你的帮助.谢谢 .
问题: 在某个系统中,主存储器访问时间为100 ns.缓存比主内存快10倍,并使用写入协议.如果读取请求的命中率是0.92,并且CPU生成的内存请求的85%用于读取,则剩余的用于写入; 然后考虑读写请求的平均时间是
a)14.62ns
b)348.47ns
c)29.62ns
d)296.2ns
我的工作 ::::
那么,内存访问时间= 100ns
缓存访问时间将= 10 ns(快10倍)
In order to find avg time we have a formula
Tavg = hc+(1-h)M
where h = hit rate
(1-h) = miss rate
c = time to access information from cache
M = miss penalty (time to access main memory)
Run Code Online (Sandbox Code Playgroud)
直写操作:缓存位置和主存储器位置同时更新.
假设CPU生成的85%请求是读请求,15%是写请求.
Tavg = 0.85(avg time for read request)+ 0.15(avg time for write request)
= 0.85(0.92*10+0.08*100)+0.15(avg time for write request)
Run Code Online (Sandbox Code Playgroud)
//*0.92是读取请求的命中率,但是没有给出写入请求的命中率?
如果我假设写请求的命中率与读请求的命中率相同,那么,
= 0.85(0.92*10+0.08*100)+0.15(0.92*(10+100)+0.08*100) …Run Code Online (Sandbox Code Playgroud) 我目前正在开发平台并尝试实现时间步长,但对于超过60的帧速率限制,CPU使用率从1%上升到25%甚至更高.
我制作了这个最小程序来演示这个问题.代码中有两条注释(第10-13行,第26-30行)描述了问题以及我测试过的内容.
请注意,FPS的东西与问题无关(我认为).
我试着让代码简洁明了:
#include <memory>
#include <sstream>
#include <iomanip>
#include <SFML\Graphics.hpp>
int main() {
// Window
std::shared_ptr<sf::RenderWindow> window;
window = std::make_shared<sf::RenderWindow>(sf::VideoMode(640, 480, 32), "Test", sf::Style::Close);
/*
When I use the setFramerateLimit() function below, the CPU usage is only 1% instead of 25%+
(And only if I set the limit to 60 or less. For example 120 increases CPU usage to 25%+ again.)
*/
//window->setFramerateLimit(60);
// FPS text
sf::Font font;
font.loadFromFile("font.ttf");
sf::Text fpsText("", font, 30);
fpsText.setColor(sf::Color(0, 0, 0));
// FPS …Run Code Online (Sandbox Code Playgroud) 我已经写了几个月的Android应用了.它尚未发布,但已安装在我的设备中.
今天我从Battery Doctor应用程序收到一条关于我的应用消耗了大量CPU的通知,即使我从昨天起就没用过它.
所以基本上我的应用程序在后台运行,它不应该做任何事情,但它正在使用CPU.
所以我打开了TraceView并在我的应用程序中进行了一些分析(在此分析时间内我根本没有与我的应用程序进行交互)这就是我得到的:http://i.imgur.com/ PYg6twX.png
我在这里很无能为力.我从实际代码中看不到任何功能,所以我甚至不知道从哪里开始查找.我真的不明白屏幕截图中的功能是什么,或者为什么它们会出现在那里.
所以我有几个问题,我真的很感激一些帮助:
非常感谢!
如果每个新线程想要访问内存(在我的情况下特别是相同的数据库)并在其生命周期内执行读/写操作,那么线程是否会导致颠簸?
我认为这是真的.如果我的假设是正确的,那么最大化CPU利用率的最佳方法是什么?我如何确定某些特定数量的线程将提供良好的CPU利用率?
如果我的假设是错误的,请做适当的插图让我清楚地了解情景.
我会尽力提供尽可能多的信息.虽然解决方案很棒,但我只想获得如何解决问题的指导.如何查看更多有用的日志文件等.因为我是服务器维护的新手.欢迎任何建议.
这是按时间顺序发生的事情:
我会继续做研究并提供更多信息.同时欢迎任何意见.
谢谢.
2016年5月20日更新
sudo service restart postgresql(和gunicorn,Django的服务器上nginx的)不不解决冻结(我认为这是一个非常有趣的观点)更新#2 2016年5月20日 当冻结发生时,我尝试按时间顺序执行以下操作(关闭所有内容并逐个转回)
sudo service stop postgresql - > cpu使用率降至0-10%sudo service stop gunicorn - > cpu使用率保持在0-10%sudo service stop nginx- > cpu使用率保持在0-10%sudo service restart postgresql - > cpu使用率保持在0-10%sudo …cpu-usage ×10
android ×2
c++ ×2
performance ×2
.net ×1
apache ×1
cpu ×1
django ×1
frame-rate ×1
memory ×1
nginx ×1
optimization ×1
php ×1
postgresql ×1
sfml ×1
system ×1
twig ×1
ubuntu-14.04 ×1