dart vm-提高读取json和http通信的性能
我在比较dart和nodejs 我重写了nodeJs应用程序来解析并返回给http客户端大量的json(大约1000个对象)。出于测试目的,json从文件中读取。然后json被解析为映射,转换为新的表示形式,并响应到客户端 可以在此处找到示例应用程序 当我增加服务的并发调用数时,我注意到响应时间的增加 下面是10个并发线程处理40个请求的ab报告dart vm-提高读取json和http通信的性能,dart,Dart,我在比较dart和nodejs 我重写了nodeJs应用程序来解析并返回给http客户端大量的json(大约1000个对象)。出于测试目的,json从文件中读取。然后json被解析为映射,转换为新的表示形式,并响应到客户端 可以在此处找到示例应用程序 当我增加服务的并发调用数时,我注意到响应时间的增加 下面是10个并发线程处理40个请求的ab报告 document Length: 613480 bytes Concurrency Level: 10 Time taken
document Length: 613480 bytes
Concurrency Level: 10
Time taken for tests: 9.079 seconds
Complete requests: 40
Failed requests: 0
Write errors: 0
Total transferred: 24542960 bytes
HTML transferred: 24539200 bytes
Requests per second: 4.41 [#/sec] (mean)
Time per request: 2269.770 [ms] (mean)
Time per request: 226.977 [ms] (mean, across all concurrent requests)
Transfer rate: 2639.89 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 5
Processing: 1250 2111 300.0 2126 2880
Waiting: 1024 1917 307.9 1948 2840
Total: 1255 2111 299.6 2126 2880
Percentage of the requests served within a certain time (ms)
50% 2126
66% 2213
75% 2233
80% 2243
90% 2446
95% 2865
98% 2880
99% 2880
100% 2880 (longest request)
请注意,如果只使用2个并发线程,响应时间会下降
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 279 447 140.9 415 1033
Waiting: 224 397 140.1 405 1000
Total: 279 447 140.9 415 1033
Percentage of the requests served within a certain time (ms)
50% 415
66% 422
75% 430
80% 434
90% 463
95% 1007
98% 1033
99% 1033
100% 1033 (longest request)
当只有一个客户机时,速度会非常快
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 189 207 14.7 205 265
Waiting: 186 205 14.5 203 262
Total: 189 207 14.7 205 265
Percentage of the requests served within a certain time (ms)
50% 205
66% 209
75% 214
80% 217
90% 224
95% 240
98% 265
99% 265
100% 265 (longest request)
这里是运行在同一数据和同一机器上的节点的ab输出
Document Length: 807396 bytes
Concurrency Level: 10
Time taken for tests: 3.955 seconds
Complete requests: 40
Failed requests: 0
Write errors: 0
Total transferred: 32304320 bytes
HTML transferred: 32295840 bytes
Requests per second: 10.11 [#/sec] (mean)
Time per request: 988.661 [ms] (mean)
Time per request: 98.866 [ms] (mean, across all concurrent requests)
Transfer rate: 7977.25 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 3
Processing: 954 987 18.6 1000 1007
Waiting: 116 567 272.1 598 999
Total: 954 987 18.7 1001 1007
Percentage of the requests served within a certain time (ms)
50% 1001
66% 1004
75% 1004
80% 1004
90% 1005
95% 1005
98% 1007
99% 1007
100% 1007 (longest request)
我知道如果我在事件队列上放置许多事件,响应时间会增加。但我预计dart会更早地使用微任务来处理等待事件
这是数据示例,结果数组始终包含1000项
{
"numFound": 1234,
"results": [
{
"cid": "id",
"cir": "id",
"cn": "name",
"cbr": "string",
"crn": "string",
"dep": "string",
"depid": "id",
"fn": "string",
"jvid": "id",
"loc": "string",
"pid": "id",
"date": int,
"toe": "string",
"ujn": "string",
"vn": "string",
"ind": "string",
"indid": "id",
"fun": "string",
"funid": "id",
"des": "string",
"date2": int,
"uuid": "string",
"elv": "string",
"elvid": "id",
"cfv": Array<Objects>
}
]
}
{
“numFound”:1234,
“结果”:[
{
“cid”:“id”,
“cir”:“id”,
“cn”:“名称”,
“cbr”:“字符串”,
“crn”:“字符串”,
“dep”:“字符串”,
“depid”:“id”,
“fn”:“字符串”,
“jvid”:“id”,
“loc”:“字符串”,
“pid”:“id”,
“日期”:int,
“脚趾”:“字符串”,
“ujn”:“字符串”,
“vn”:“字符串”,
“ind”:“string”,
“indid”:“id”,
“乐趣”:“字符串”,
“funid”:“id”,
“des”:“string”,
“date2”:int,
“uuid”:“字符串”,
“elv”:“字符串”,
“elvid”:“id”,
“cfv”:数组
}
]
}
我正在使用centos 6.5(我已经构建了dart 1.2 sdk)。我使用
性能记录-g--dart--generate_perf_events_symbols start.dart
下面是“perf report--call graph flat”显示的内容,但我不确定如何解释输出以改进代码
75.86% dart [kernel.kallsyms] [k] __do_softirq
+ 3.62% dart dart [.] dart::MarkingVisitor::VisitPointers(dart::RawObject**, dart::RawObject**)
+ 1.36% dart dart [.] dart::ScavengerVisitor::VisitPointers(dart::RawObject**, dart::RawObject**)
+ 1.02% dart dart [.] dart::GCSweeper::SweepPage(dart::HeapPage*, dart::FreeList*)
+ 0.96% dart perf-5465.map [.] *dart:core_StringBuffer_writeCharCode
+ 0.74% dart perf-5465.map [.] *dart:convert__Utf8Decoder@0xda80e0a_convert
+ 0.71% dart perf-5465.map [.] *dart:convert__JsonStringifier@0xda80e0a_escape
+ 0.57% dart perf-5465.map [.] *dart:convert__Utf8Encoder@0xda80e0a__fillBuffer@0xda80e0a
+ 0.55% dart libc-2.12.so [.] _wordcopy_fwd_aligned
0.53% dart [kernel.kallsyms] [k] retint_careful
+ 0.52% dart perf-5465.map [.] *dart:core_StringBuffer__addPart@0x36924d72
0.50% dart [kernel.kallsyms] [k] finish_task_switch
0.49% dart dart [.] dart::RawObject::VisitPointers(dart::ObjectPointerVisitor*)
0.41% dart [vsyscall] [.] 0x000000000000014c
0.38% dart libc-2.12.so [.] memmove
0.29% dart libpthread-2.12.so [.] pthread_getspecific
0.29% dart dart [.] dart::FreeList::TryAllocate(long, bool)
0.28% dart perf-5465.map [.] dart:core__List@0x36924d72__List@0x36924d72.
0.28% dart perf-5465.map [.] *dart:convert__JsonParser@0xda80e0a_parse
0.27% dart perf-5465.map [.] *dart:core_StringBuffer_write
0.27% dart perf-5465.map [.] *package:public-api/publicApi.dart_PostingResultMapper_mapPosting_mapPosting
0.27% dart [kernel.kallsyms] [k] _spin_unlock_irqrestore
0.27% dart dart [.] dart::String::Copy(dart::String const&, long, unsigned char const*, long)
0.27% dart dart [.] dart::VMHandles::AllocateHandle(dart::Isolate*)
0.26% dart perf-5465.map [.] *dart:collection__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0_forEach
0.25% dart perf-5465.map [.] *dart:convert__JsonStringifier@0xda80e0a_stringifyJsonValue
0.24% dart dart [.] dart::Object::Allocate(long, long, dart::Heap::Space)
0.24% dart perf-5465.map [.] dart:core__StringBase@0x36924d72_codeUnitAt
0.23% dart dart [.] dart::GCMarker::DrainMarkingStack(dart::Isolate*, dart::MarkingVisitor*)
0.22% dart dart [.] dart::ClassTable::UpdateLiveOld(long, long)
0.22% dart perf-5465.map [.] *dart:convert__JsonParser@0xda80e0a_parseString
0.21% dart perf-5465.map [.] *dart:convert__JsonParser@0xda80e0a_parseString
0.20% dart dart [.] dart::String::Copy(dart::String const&, long, dart::String const&, long, long)
0.17% dart dart [.] dart::OneByteString::ConcatAll(dart::Array const&, long, long, long, dart::Heap::Space)
0.16% dart [kernel.kallsyms] [k] __do_page_fault
0.16% dart dart [.] dart::BootstrapNatives::DN_StringBase_substringUnchecked(_Dart_NativeArguments*)
0.15% dart dart [.] dart::String::ConcatAllRange(dart::Array const&, long, long, dart::Heap::Space)
0.15% dart perf-5465.map [.] *dart:core_StringBuffer__consumeBuffer@0x36924d72
0.14% dart [kernel.kallsyms] [k] clear_page_c
0.13% dart perf-5465.map [.] _stub_OneArgCheckInlineCache
0.12% dart perf-5465.map [.] *dart:core__StringBase@0x36924d72_substring
0.11% dart dart [.] dart::String::Copy(dart::String const&, long, unsigned short const*, long)
0.11% dart perf-5465.map [.] *dart:collection__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0__addEntry@0x23c35ea0
0.11% dart dart [.] dart::String::SubString(dart::String const&, long, long, dart::Heap::Space)
0.11% dart dart [.] dart::FreeList::SplitElementAfterAndEnqueue(dart::FreeListElement*, long, bool)
0.10% dart [kernel.kallsyms] [k] get_page_from_freelist
0.10% dart dart [.] 0x000000000031b333
0.10% dart dart [.] dart::Scavenger::ProcessToSpace(dart::ScavengerVisitor*)
0.09% dart dart [.] dart::RawArray::VisitArrayPointers(dart::RawArray*, dart::ObjectPointerVisitor*)
0.09% dart dart [.] dart::ClassTable::UpdateAllocatedOld(long, long)
0.08% dart dart [.] dart::Profiler::RecordSampleInterruptCallback(dart::InterruptedThreadState const&, void*)
0.08% dart dart [.] dart::BootstrapNatives::DN_String_concatRange(_Dart_NativeArguments*)
0.08% dart perf-5465.map [.] *dart:convert__JsonStringifier@0xda80e0a_stringifyJsonValue_<anonymous closure>
0.07% dart perf-5465.map [.] _stub_TwoArgsCheckInlineCache
0.07% dart dart [.] dart::BootstrapNatives::DN_Object_getHash(_Dart_NativeArguments*)
0.07% dart perf-5465.map [.] *dart:core__Smi@0x36924d72_toString
0.07% dart perf-5465.map [.] dart:core__OneByteString@0x36924d72_get_hashCode
0.07% dart dart [.] dart::Instance::IsInstance() const
0.06% dart dart [.] dart::BootstrapNatives::DN_StringBuffer_createStringFromUint16Array(_Dart_NativeArguments*)
0.06% dart perf-5465.map [.] *dart:collection_Maps_mapToString
0.06% dart dart [.] dart::VMHandles::~VMHandles()
0.06% dart dart [.] dart::GCMarker::MarkObjects(dart::Isolate*, dart::PageSpace*, bool, bool)
0.06% dart dart [.] dart::PageSpace::TryAllocate(long, dart::HeapPage::PageType, dart::PageSpace::GrowthPolicy)
0.06% dart [kernel.kallsyms] [k] free_hot_cold_page
0.06% dart perf-5465.map [.] dart:core__StringBase@0x36924d72__substringUncheckedNative@0x36924d72
0.06% dart dart [.] dart::LoadOptimizer::Optimize()
0.06% dart dart [.] dart::Heap::AllocateNew(long)
75.86%dart[kernel.kallsyms][k]\u do\u softirq
+3.62%省道[.]省道::标记访客::访客点(省道::RawObject**,省道::RawObject**)
+1.36%省道[.]省道::扫掠器::访问指针(省道::RawObject**,省道::RawObject**)
+1.02%省道[.]省道::GCSweepper::SweepPage(省道::HeapPage*,省道::FreeList*)
+0.96%dart perf-5465.map[.]*dart:core\U StringBuffer\U writeCharCode
+0.74%省道性能-5465.map[.]*省道:转换__Utf8Decoder@0xda80e0a_convert
+0.71%省道性能-5465.map[.]*省道:转换__JsonStringifier@0xda80e0a_escape
+0.57%省道性能-5465.map[.]*省道:转换__Utf8Encoder@0xda80e0a__fillBuffer@0xda80e0a
+0.55%dart libc-2.12.so[.]\u文字复制\u fwd\u对齐
0.53%dart[内核.kallsyms][k]参考值
+0.52%dart性能-5465.map[.]*dart:core_StringBuffer__addPart@0x36924d72
0.50%dart[kernel.kallsyms][k]完成任务切换
0.49%省道[.]省道::RawObject::访问点(省道::ObjectPointServiceSitor*)
0.41%dart[vsyscall][.]0x000000000000014c
0.38%dart libc-2.12.so[.]memmove
0.29%dart libpthread-2.12.so[.]pthread_getspecific
0.29%省道[.]省道::自由列表::tryallosite(长,布尔)
0.28%省道性能-5465.map[.]省道:核心__List@0x36924d72__List@0x36924d72。
0.28%省道性能-5465.map[.]*省道:转换__JsonParser@0xda80e0a_parse
0.27%dart性能-5465.map[.]*dart:core\u StringBuffer\u write
0.27%dart perf-5465.map[.]*包:公共api/publicApi.dart\u PostingResultMapper\u mapPosting\u mapPosting
0.27%飞镖[kernel.kallsyms][k]\u旋转\u解锁\u irqrestore
0.27%省道[.]省道::字符串::复制(省道::字符串常量和,长,无符号字符常量*,长)
0.27%省道[.]省道::VMHandles::分配句柄(省道::隔离*)
0.26%省道性能-5465.map[.]*省道:收集__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0_forEach
0.25%省道性能-5465.map[.]*省道:转换__JsonStringifier@0xda80e0a_stringifyJsonValue
0.24%省道[.]省道::对象::分配(长,长,省道::堆::空间)
0.24%省道性能-5465.map[.]省道:核心__StringBase@0x36924d72_codeUnitAt
0.23%省道[.]省道::GCMarker::DrainMarkingStack(省道::隔离*,省道::标记访客*)
0.22%省道[.]省道::类表::更新版本(长,长)
0.22%省道性能-5465.map[.]*省道:转换__JsonParser@0xda80e0a_parseString
0.21%省道性能-5465.map[.]*省道:转换__JsonParser@0xda80e0a_parseString
0.20%省道[.]省道::字符串::复制(省道::字符串常量和,长,省道::字符串常量和,长,长)
0.17%dart dart[.]dart::OneByteString::ConcatAll(dart::数组常量&,long,long,long,dart::Heap::Space)
0.16%dart[kernel.kallsyms][k]\u do\u page\u错误
0.16%省道[.]省道::引导策略::DN\u StringBase\u子字符串未选中(\u dart\u NativeArguments*)
0.15%省道[.]省道::字符串::concatalrange(省道::数组常量&,长,长,省道::堆::空间)
0.15%dart性能-5465.map[.]*dart:core_StringBuffer__consumeBuffer@0x36924d72
0.14%dart[kernel.kallsyms][k]清除页面
0.13%dart perf-5465.map[.]\u存根\u OneArgCheckInlineCache
0.12%省道性能-5465.map[.]*省道:核心__StringBase@0x36924d72_substring
0.11%省道[.]省道::字符串::复制(省道::字符串常量&,长,无符号短常量*,长)
0.11%省道性能-5465.map[.]*省道:收集__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0__addEntry@0x23c35ea0
0.11%