Newrelic说2[System.Data.DataRow,System.Object]],System.Object]
大约需要9秒。
请参阅下面的快照:
我们有以下服务器配置
任何人都可以帮助解决为什么在中间件中花费这么多时间吗?
答案 0 :(得分:0)
这听起来像rails的多线程模式已关闭。这会添加func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) { //This is the stream IO function. It allows RW of the stream
switch (eventCode){
case NSStreamEvent.ErrorOccurred:
NSLog("ErrorOccurred")
break
case NSStreamEvent.EndEncountered:
NSLog("EndEncountered")
break
case NSStreamEvent.None:
NSLog("None")
break
case NSStreamEvent.HasBytesAvailable:
NSLog("HasBytesAvaible")
var buffer = [UInt8](count: 4096, repeatedValue: 0)
if ( aStream == inputstream){
while (inputstream.hasBytesAvailable){
var len = inputstream.read(&buffer, maxLength: buffer.count)
if(len > 0){
var output = NSString(bytes: &buffer, length: buffer.count, encoding: NSUTF8StringEncoding)
if (output != ""){
NSLog("server said: %@", output!)
}
}
}
}
break
case NSStreamEvent.allZeros:
NSLog("allZeros")
break
case NSStreamEvent.OpenCompleted:
NSLog("OpenCompleted")
break
case NSStreamEvent.HasSpaceAvailable:
NSLog("HasSpaceAvailable")
break
default:
// default code here
break
}
中间件,后者又使用互斥锁来确保每个rails实例一次处理一个请求。您看到的数字表明这导致请求在您的rails实例中排队。
这是Rack::Lock
设置的控制器,默认为false。
作为旁注,MRI并不擅长于concurency(如果你是cpu绑定的) - 你可能最好用更少的线程运行更多的工人。您也可以切换到jruby(没有GIL),但这显然是一项更大的任务。