我们有一个新客户端,目前我们正在使用100个并发http线程(使用Jmeter)对服务器进行压力测试.问题是即使我们有2个Xeon处理器(每个CPU有4个内核,总共8个内核),我只能看到tomcat使用4个内核而不是8个内核.这4个核心我相信它只属于1个处理器.其他4个线程实际上正在睡觉.
我从Apache文档中得到的印象是,如果我们有多CPU机器,我们应该配置acceptorThreadCount ="2":http: //tomcat.apache.org/tomcat-6.0-doc/config/http.html
我们已将默认连接器更改为tomcatThreadPool,其中maxThreads ="150"minSpareThreads ="4",连接器执行器更改为acceptorThreadCount ="2".但它仍然只使用1个CPU.
知道如何配置利用所有核心(或所有CPU的处理器)?
在Javascript中,假设我想在异常发生时执行一些清理,但让异常继续向上传播,例如:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于捕获和重新抛出异常会导致到那一点的堆栈跟踪信息丢失,因此如果随后再次捕获异常,堆栈上的堆栈更高,堆栈跟踪只会下降到re -扔.这很糟糕,因为它意味着它不包含实际抛出异常的函数.
事实证明,try..finally具有相同的行为,至少在Chrome中(也就是说,它不是精确地重新抛出问题,而是存在任何异常处理程序块.)
有没有人知道在Javascript中重新抛出异常但保留与之关联的堆栈跟踪的方法?如果不这样做,那么建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪?
感谢任何指针:)
javascript callstack exception-handling exception stack-trace
可能这不是一个非常复杂的问题,但首先,我不知道,我应该搜索哪些搜索查询?!
在我的应用程序开始时,我想启动GPS,如果我的应用程序将被启用GPS应该关闭.
如果整个应用程序(非活动)完成,我该如何检查?
是否足以使用onDestroy-Method for Start-Activity,它永远不会以finish()结束?
非常感谢,对于初学者的问题感到抱歉.
穆尔
UPD
我看到了第一个答案,我想说一次.
我不是指ACTIVITY,我的意思是整个APPLICATION(存在许多活动).
如何检查所有应用程序的活动是否已完成,仅在这种情况下停止服务?
那有可能吗?
UPD2:
我在设备上测试了我的解决方案:
"使用onDestroy-Method for Start-Activity就足够了,它永远不会以finish()结束?"
是的,这就够了.
编译器为类创建的所有成员函数是什么?这会一直发生吗?像析构函数.我担心的是它是否为所有类创建,为什么需要默认构造函数?
我的Excel宏中存在性能问题.一段特殊的代码运行速度非常慢.我认为原因是Offset功能.我在网上发现它是一个易于重新计算的易失函数.
奇怪的是,我使用它作为一个VBA函数,所以我想不通,因为它从来没有它会如何影响性能需要重新计算.
这就是我使用offset函数的方法:
For i=0 To 10
For P=0 To 3
For T=0 To 3
Range("C9").Offset(6 * i + T, P).Value = effect(i,P,T)
Next
Next
Next
Run Code Online (Sandbox Code Playgroud)
是否存在更快(非易失性?)的替代方案?
有一个密码字段,理想情况下我们希望人们输入密码而不是复制并粘贴它.使用Javascript有一种简单的方法吗?
我在现有组中创建新计数器时遇到一个奇怪的问题.我有一个Windows服务,它做了一些工作,并允许我通过性能计数器监视其状态.我有性能计数器组和一些性能计数器.在服务安装阶段(具有管理员权限)创建组,并在服务启动时初始化计数器(作为LocalSystem用户).一切正常,组存在,计数器也存在,我可以监视它们并写入性能计数器日志.服务不断运行.
然后我想添加一些性能计数器.我将它们添加到服务代码中,通过卸载以前的服务实例(卸载代码删除性能计数器组)重新生成并部署到服务器,然后再次安装服务(在安装阶段使用所有新计数器创建性能计数器组).然后我开始服务.
这是故事中常见,无趣的部分的结束.奇怪的事情从这里开始.
我转到PerMon,将所有计数器添加到系统监视器视图.我可以看到我的性能计数器组,我看到所有性能计数器,包括我刚刚添加的新性能计数器.我可以将它们添加到系统监视器视图.我可以看到,旧的计数器正在工作.但新计数器不起作用,它们不收集任何数据.好吧,好吧,也许是我的错误,我切换到日志视图并尝试记录性能计数器数据.旧计数器在记录之前记录.但是当我尝试添加新计数器时,我在事件查看器中发现以下警告:
该服务无法将计数器'\ AGENT\MyCountersGroupName\MyNewCounter'添加到NewCountersLog日志或警报.此日志或警报将继续,但不会收集该计数器的数据.返回的错误是:找不到指定的计数器.
我试图重新安装服务,删除旧计数器,再次添加它们,没有任何改变.旧计数器正在工作,新计数器不起作用.然后我重新启动Windows,新的计数器开始工作!服务没有任何改变,我刚刚重启了服务器.我在2台服务器上遇到此问题,两者都在Windows Server 2003 SP1下运行.所有性能计数器的代码都是相同的,因为我使用泛型代码创建它们.
您可以说"嘿,不要打扰,每当您需要添加新的性能计数器时重新启动Windows",但我不能.我的服务与其他服务一起在服务器上运行,我们需要这些服务不断工作,每次更改一项服务时都无法重启服务器.
任何人都可以帮助解决这个问题吗?
更新: 看起来有类似的问题:https://stackoverflow.com/questions/2180005/adding-performance-counters-to-existing-category
更新 我不认为问题出在我的代码中,但如果有帮助我在这里发布.
安装和卸载代码(在安装阶段调用): PerformanceCountersManagerBase.GetCreationData()是一个通用的包装器,用于获取数据集合以创建性能计数器.
public static void Install()
{
CounterCreationDataCollection counters = new CounterCreationDataCollection(
PerformanceCountersManagerBase.GetCreationData<TManager>().ToArray());
if (PerformanceCounterCategory.Exists(PerformanceCountersManagerBase.GroupName))
PerformanceCounterCategory.Delete(PerformanceCountersManagerBase.
PerformanceCounterCategory.Create(PerformanceCountersManagerBase.GroupName,
"Group description",
PerformanceCounterCategoryType.SingleInstance, counters);
}
public static void Uninstall()
{
if (!PerformanceCounterCategory.Exists(PerformanceCountersManagerBase.GroupName))
return;
PerformanceCounterCategory.Delete(PerformanceCountersManagerBase.GroupName);
}
Run Code Online (Sandbox Code Playgroud)
用于初始化服务和更新中的计数器的代码:
internal void Initialize(string name, string groupName)
{
_counter = new PerformanceCounter(groupName, name, false);
_counter.RawValue = 0;
}
internal void Increment()
{
if ((_counter == null) || _counter.ReadOnly)
return; …Run Code Online (Sandbox Code Playgroud) 我想触发一个在后台线程上运行的任务.我不想等待任务完成.
在.net 3.5中,我会这样做:
ThreadPool.QueueUserWorkItem(d => { DoSomething(); });
Run Code Online (Sandbox Code Playgroud)
在.net 4中,TPL是建议的方式.我见过的常见模式是:
Task.Factory.StartNew(() => { DoSomething(); });
Run Code Online (Sandbox Code Playgroud)
但是,该StartNew()方法返回一个Task实现的对象IDisposable.推荐这种模式的人似乎忽视了这一点.有关该Task.Dispose()方法的MSDN文档说:
"在释放对任务的最后一个引用之前,始终调用Dispose."
你不能在任务完成之前调用dispose,所以让主线程等待并调用dispose会首先打破后台线程上的操作.似乎也没有任何已完成/已完成的事件可用于清理.
Task类上的MSDN页面没有对此进行评论,并且"Pro C#2010 ..."一书推荐了相同的模式,并且没有对任务处理做出评论.
我知道如果我离开它,终结者最终会抓住它,但当我做了大量的火灾并且忘记了这样的任务并且终结者线程被淹没时,它会回来咬我吗?
所以我的问题是:
Dispose()就Task在这种情况下类?如果是这样,为什么会有风险/后果?Task我错过的物体?我的情景:
当我使用www.google.com ping时,它会提供成功状态,当我尝试ping http://stackoverflow.com时, 我收到异常"Ping请求期间发生异常".是什么原因?我怎么解决?
using (Ping png = new Ping())
{
PingReply pr = png.Send("http://stackoverflow.com");
string status= pr.Status.ToString();
}
Run Code Online (Sandbox Code Playgroud)