来新公司前,领导就说了,线上生产环境Mysql库经常会发生日间内存爆掉被killed的情况,结果来到这第一天,第一件事就是要根据线上服务器配置优化配置,同时必须找出现在mysql内存持续增加爆掉的原因,虽然我主业已经不是数据库更不是dba了。看了下mysql占用内存区域的分布:

[root@iZ23nn1p4mjZ osm-all]# pmap -x 5524
5524: /usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/bin/mysqld --basedir=/usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101 --datadir=/usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/data --plugin-dir=/usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/lib/mysql/plugin --user=mysql --log-error=/usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/data/iZ23nn1p4mjZ.err --open-files-limit=32767 --pid-file=/usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/data/iZ23nn1p4mjZ.pid --po
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 22772 4876 0 r-x-- mysqld
0000000001c3c000 1628 616 272 rw--- mysqld
0000000001dd3000 836 428 428 rw--- [ anon ]
00000035c2c00000 128 20 0 r-x-- ld-2.12.so
00000035c2e1f000 4 4 4 r---- ld-2.12.so
00000035c2e20000 4 4 4 rw--- ld-2.12.so
00000035c2e21000 4 4 4 rw--- [ anon ]
00000035c3000000 4 4 0 r-x-- libaio.so.1.0.1
00000035c3001000 2044 0 0 ----- libaio.so.1.0.1
00000035c3200000 4 0 0 rw--- libaio.so.1.0.1
00000035c3400000 1576 336 0 r-x-- libc-2.12.so
00000035c358a000 2048 0 0 ----- libc-2.12.so
00000035c378a000 16 16 8 r---- libc-2.12.so
00000035c378e000 4 4 4 rw--- libc-2.12.so
00000035c378f000 20 12 12 rw--- [ anon ]
00000035c3800000 92 52 0 r-x-- libpthread-2.12.so
00000035c3817000 2048 0 0 ----- libpthread-2.12.so
00000035c3a17000 4 4 4 r---- libpthread-2.12.so
00000035c3a18000 4 4 4 rw--- libpthread-2.12.so
00000035c3a19000 16 4 4 rw--- [ anon ]
00000035c3c00000 8 0 0 r-x-- libdl-2.12.so
00000035c3c02000 2048 0 0 ----- libdl-2.12.so
00000035c3e02000 4 0 0 r---- libdl-2.12.so
00000035c3e03000 4 0 0 rw--- libdl-2.12.so
00000035c4000000 28 4 0 r-x-- librt-2.12.so
00000035c4007000 2044 0 0 ----- librt-2.12.so
00000035c4206000 4 4 4 r---- librt-2.12.so
00000035c4207000 4 0 0 rw--- librt-2.12.so
00000035c4400000 524 0 0 r-x-- libm-2.12.so
00000035c4483000 2044 0 0 ----- libm-2.12.so
00000035c4682000 4 4 4 r---- libm-2.12.so
00000035c4683000 4 4 4 rw--- libm-2.12.so
00000035c4800000 116 0 0 r-x-- libselinux.so.1
00000035c481d000 2044 0 0 ----- libselinux.so.1
00000035c4a1c000 4 0 0 r---- libselinux.so.1
00000035c4a1d000 4 0 0 rw--- libselinux.so.1
00000035c4a1e000 4 0 0 rw--- [ anon ]
00000035c5000000 12 0 0 r-x-- libcom_err.so.2.1
00000035c5003000 2044 0 0 ----- libcom_err.so.2.1
00000035c5202000 4 0 0 r---- libcom_err.so.2.1
00000035c5203000 4 0 0 rw--- libcom_err.so.2.1
00000035c5400000 88 0 0 r-x-- libresolv-2.12.so
00000035c5416000 2048 0 0 ----- libresolv-2.12.so
00000035c5616000 4 0 0 r---- libresolv-2.12.so
00000035c5617000 4 0 0 rw--- libresolv-2.12.so
00000035c5618000 8 0 0 rw--- [ anon ]
00000035c7000000 452 0 0 r-x-- libfreebl3.so
00000035c7071000 2044 0 0 ----- libfreebl3.so
00000035c7270000 8 0 0 r---- libfreebl3.so
00000035c7272000 4 0 0 rw--- libfreebl3.so
00000035c7273000 16 0 0 rw--- [ anon ]
00000035c7400000 28 0 0 r-x-- libcrypt-2.12.so
00000035c7407000 2048 0 0 ----- libcrypt-2.12.so
00000035c7607000 4 0 0 r---- libcrypt-2.12.so
00000035c7608000 4 0 0 rw--- libcrypt-2.12.so
00000035c7609000 184 0 0 rw--- [ anon ]
00000035c8800000 8 0 0 r-x-- libkeyutils.so.1.3
00000035c8802000 2044 0 0 ----- libkeyutils.so.1.3
00000035c8a01000 4 0 0 r---- libkeyutils.so.1.3
00000035c8a02000 4 0 0 rw--- libkeyutils.so.1.3
00000035c9800000 1764 72 0 r-x-- libcrypto.so.1.0.1e
00000035c99b9000 2044 0 0 ----- libcrypto.so.1.0.1e
00000035c9bb8000 108 4 0 r---- libcrypto.so.1.0.1e
00000035c9bd3000 48 12 12 rw--- libcrypto.so.1.0.1e
00000035c9bdf000 16 8 8 rw--- [ anon ]
0000003891400000 928 116 0 r-x-- libstdc++.so.6.0.13
00000038914e8000 2048 0 0 ----- libstdc++.so.6.0.13
00000038916e8000 28 20 12 r---- libstdc++.so.6.0.13
00000038916ef000 8 8 8 rw--- libstdc++.so.6.0.13
00000038916f1000 84 12 8 rw--- [ anon ]
0000003891800000 88 0 0 r-x-- libgcc_s-4.4.7-20120601.so.1
0000003891816000 2044 0 0 ----- libgcc_s-4.4.7-20120601.so.1
0000003891a15000 4 0 0 rw--- libgcc_s-4.4.7-20120601.so.1
0000003d4a800000 260 0 0 r-x-- libgssapi_krb5.so.2.2
0000003d4a841000 2048 0 0 ----- libgssapi_krb5.so.2.2
0000003d4aa41000 4 0 0 r---- libgssapi_krb5.so.2.2
0000003d4aa42000 8 0 0 rw--- libgssapi_krb5.so.2.2
0000003d4ac00000 164 0 0 r-x-- libk5crypto.so.3.1
0000003d4ac29000 2048 0 0 ----- libk5crypto.so.3.1
0000003d4ae29000 4 0 0 r---- libk5crypto.so.3.1
0000003d4ae2a000 4 0 0 rw--- libk5crypto.so.3.1
0000003d4ae2b000 4 0 0 rw--- [ anon ]
0000003d4b000000 40 0 0 r-x-- libkrb5support.so.0.1
0000003d4b00a000 2044 0 0 ----- libkrb5support.so.0.1
0000003d4b209000 4 0 0 r---- libkrb5support.so.0.1
0000003d4b20a000 4 0 0 rw--- libkrb5support.so.0.1
0000003d4b400000 392 0 0 r-x-- libssl.so.1.0.1e
0000003d4b462000 2044 0 0 ----- libssl.so.1.0.1e
0000003d4b661000 16 0 0 r---- libssl.so.1.0.1e
0000003d4b665000 28 4 4 rw--- libssl.so.1.0.1e
0000003d4b800000 876 0 0 r-x-- libkrb5.so.3.3
0000003d4b8db000 2044 0 0 ----- libkrb5.so.3.3
0000003d4bada000 40 0 0 r---- libkrb5.so.3.3
0000003d4bae4000 8 0 0 rw--- libkrb5.so.3.3
0000003f13600000 32 0 0 r-x-- libnuma.so.1
0000003f13608000 2048 0 0 ----- libnuma.so.1
0000003f13808000 4 4 4 rw--- libnuma.so.1
00007f46ddc00000 3776512 2380752 2380668 rw--- [ anon ]
00007f47c4639000 4 0 0 ----- [ anon ]
00007f47c463a000 256 24 24 rw--- [ anon ]
00007f47c467a000 4 0 0 ----- [ anon ]
00007f47c467b000 256 20 20 rw--- [ anon ]
00007f47c46bb000 4 0 0 ----- [ anon ]
00007f47c46bc000 256 120 120 rw--- [ anon ]
00007f47c46fc000 4 0 0 ----- [ anon ]
00007f47c46fd000 256 72 72 rw--- [ anon ]
00007f47c473d000 4 0 0 ----- [ anon ]
00007f47c473e000 256 72 72 rw--- [ anon ]
00007f47c477e000 4 0 0 ----- [ anon ]
00007f47c477f000 256 120 120 rw--- [ anon ]
00007f47c47bf000 4 0 0 ----- [ anon ]
00007f47c47c0000 225536 111736 111688 rw--- [ anon ]
00007f47d27bf000 4 0 0 ----- [ anon ]
00007f47d27c0000 53504 31016 31016 rw--- [ anon ]
00007f47d5fbf000 4 0 0 ----- [ anon ]
00007f47d5fc0000 16640 7868 7868 rw--- [ anon ]
00007f47d72bb000 4 0 0 ----- [ anon ]
00007f47d72bc000 256 120 120 rw--- [ anon ]
00007f47d72fc000 4 0 0 ----- [ anon ]
00007f47d72fd000 256 36 36 rw--- [ anon ]
00007f47d733d000 4 0 0 ----- [ anon ]
00007f47d733e000 256 56 56 rw--- [ anon ]
00007f47d737e000 4 0 0 ----- [ anon ]
00007f47d737f000 256 72 72 rw--- [ anon ]
00007f47d73bf000 4 0 0 ----- [ anon ]
00007f47d73c0000 61696 34148 34136 rw--- [ anon ]
00007f47db3bf000 4 0 0 ----- [ anon ]
00007f47db3c0000 16640 9692 9692 rw--- [ anon ]
00007f47dc7bf000 4 0 0 ----- [ anon ]
00007f47dc7c0000 16640 13124 13096 rw--- [ anon ]
00007f47dd838000 4 0 0 ----- [ anon ]
00007f47dd839000 256 120 120 rw--- [ anon ]
00007f47dd879000 4 0 0 ----- [ anon ]
00007f47dd87a000 256 20 20 rw--- [ anon ]
00007f47dd8ba000 4 0 0 ----- [ anon ]
00007f47dd8bb000 256 120 120 rw--- [ anon ]
00007f47dd8fb000 4 0 0 ----- [ anon ]
00007f47dd8fc000 256 116 116 rw--- [ anon ]
00007f47dd93c000 4 0 0 ----- [ anon ]
00007f47dd93d000 256 72 72 rw--- [ anon ]
00007f47dd97d000 4 0 0 ----- [ anon ]
00007f47dd97e000 256 84 84 rw--- [ anon ]
00007f47dd9be000 4 0 0 ----- [ anon ]
00007f47dd9bf000 256 120 120 rw--- [ anon ]
00007f47dd9ff000 4 0 0 ----- [ anon ]
00007f47dda00000 43008 17168 17140 rw--- [ anon ]
00007f47e0772000 4 0 0 ----- [ anon ]
00007f47e0773000 256 0 0 rw--- [ anon ]
00007f47e07b3000 4 0 0 ----- [ anon ]
00007f47e07b4000 256 0 0 rw--- [ anon ]
00007f47e07f4000 4 0 0 ----- [ anon ]
00007f47e07f5000 10240 0 0 rw--- [ anon ]
00007f47e11f5000 4 0 0 ----- [ anon ]
00007f47e11f6000 10240 8 8 rw--- [ anon ]
00007f47e1bf6000 4 0 0 ----- [ anon ]
00007f47e1bf7000 10240 36 36 rw--- [ anon ]
00007f47e25f7000 4 0 0 ----- [ anon ]
00007f47e25f8000 10240 0 0 rw--- [ anon ]
00007f47e2ff8000 4 0 0 ----- [ anon ]
00007f47e2ff9000 10240 24 24 rw--- [ anon ]
00007f47e39f9000 4 0 0 ----- [ anon ]
00007f47e39fa000 10240 24 24 rw--- [ anon ]
00007f47e43fa000 4 0 0 ----- [ anon ]
00007f47e43fb000 10240 28 28 rw--- [ anon ]
00007f47e4dfb000 4 0 0 ----- [ anon ]
00007f47e4dfc000 10240 20 20 rw--- [ anon ]
00007f47e57fc000 4 0 0 ----- [ anon ]
00007f47e57fd000 10240 12 12 rw--- [ anon ]
00007f47e61fd000 4 0 0 ----- [ anon ]
00007f47e61fe000 10240 8 8 rw--- [ anon ]
00007f47e6bfe000 4 0 0 ----- [ anon ]
00007f47e6bff000 10240 8 8 rw--- [ anon ]
00007f47e75ff000 4 0 0 ----- [ anon ]
00007f47e7600000 26624 10412 10284 rw--- [ anon ]
00007f47e93ff000 16388 13536 13516 rw--- [ anon ]
00007f47ea7f3000 4 0 0 ----- [ anon ]
00007f47ea7f4000 10240 8 8 rw--- [ anon ]
00007f47eb1f4000 4 0 0 ----- [ anon ]
00007f47eb1f5000 10240 16 16 rw--- [ anon ]
00007f47ebbf5000 4 0 0 ----- [ anon ]
00007f47ebbf6000 10240 8 8 rw--- [ anon ]
00007f47ec5f6000 4 0 0 ----- [ anon ]
00007f47ec5f7000 10240 8 8 rw--- [ anon ]
00007f47ecff7000 4 0 0 ----- [ anon ]
00007f47ecff8000 10240 8 8 rw--- [ anon ]
00007f47ed9f8000 4 0 0 ----- [ anon ]
00007f47ed9f9000 10240 8 8 rw--- [ anon ]
00007f47ee3f9000 4 0 0 ----- [ anon ]
00007f47ee3fa000 10240 16 16 rw--- [ anon ]
00007f47eedfa000 4 0 0 ----- [ anon ]
00007f47eedfb000 10240 24 24 rw--- [ anon ]
00007f47ef7fb000 4 0 0 ----- [ anon ]
00007f47ef7fc000 10240 16 16 rw--- [ anon ]
00007f47f01fc000 4 0 0 ----- [ anon ]
00007f47f01fd000 10240 24 24 rw--- [ anon ]
00007f47f0bfd000 4 0 0 ----- [ anon ]
00007f47f0bfe000 10240 8 8 rw--- [ anon ]
00007f47f15fe000 4 0 0 ----- [ anon ]
00007f47f15ff000 100356 49516 49484 rw--- [ anon ]
00007f47f7a00000 1107968 747476 745544 rw--- [ anon ]
00007f483b7f1000 4 0 0 ----- [ anon ]
00007f483b7f2000 10240 0 0 rw--- [ anon ]
00007f483c1f2000 48 0 0 r-x-- libnss_files-2.12.so
00007f483c1fe000 2048 0 0 ----- libnss_files-2.12.so
00007f483c3fe000 4 0 0 r---- libnss_files-2.12.so
00007f483c3ff000 4 0 0 rw--- libnss_files-2.12.so
00007f483c400000 4096 4096 4096 rw--- [ anon ]
00007f483c9ff000 4 0 0 ----- [ anon ]
00007f483ca00000 182272 57240 57208 rw--- [ anon ]
00007f4847d2f000 152 68 68 rw--- [ anon ]
00007f4847d55000 84 0 0 r-x-- libz.so.1.2.3
00007f4847d6a000 2044 0 0 ----- libz.so.1.2.3
00007f4847f69000 4 0 0 r---- libz.so.1.2.3
00007f4847f6a000 4 4 4 rw--- libz.so.1.2.3
00007f4847f6b000 12 4 4 rw--- [ anon ]
00007f4847f6f000 32 4 4 rw--- [ anon ]
00007f4847f77000 256 72 0 r-x-- libjemalloc.so.1
00007f4847fb7000 2048 0 0 ----- libjemalloc.so.1
00007f48481b7000 8 8 8 rw--- libjemalloc.so.1
00007f48481b9000 8 8 8 rw--- [ anon ]
00007ffffdd5c000 108 12 12 rw--- [ stack ]
00007ffffddff000 4 4 0 r-x-- [ anon ]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 5971940 3496304 3488036

anon用途:'[ anon ]' for allocated memory,应该是glibc分配的内存。

一共有6列
第一列代表内存段的虚拟地址
第二列代表执行权限,r,w,x不必说,p=私有 s=共享
不用说,heap和stack段不应该有x,否则就容易被xx,不过这个跟具体的版本有关
第三列代表在进程地址里的偏移量
第四列映射文件的主设备号和次设备号
通过 cat /proc/devices
得知fd是253 device-mapper

第五列映像文件的节点号,即inode

第六列是映像文件的路径
以前我很奇怪怎么会有两个相同的文件路径,原来
08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init
08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init
一个是只读的,是代码段,一个是读写的,是数据段

这个业务上基本山算是OLTP,盘中都是很简单的SQL,所以性能上虽然有些SQL有些慢,但看过slow-log和performance_schema,可以忽略不计。

初步了解,应用是java开发的,但是应用端没有出现过OOM的情况,也不见卡死或者越来越慢的情况。

从周一开始查到今天下午,尼玛mysql跟memory leak有关的几乎任何能够查到的buglist都被一个个review验证了,差不多能遇到的各种可能性都测试过,包括但不限于concat可能存在内存分配泄露,google版jemalloc可能导致内存增长,2.6.32版本vm.swappiness=0行为发生变化可能导致内存bug,mysql memory临时表释放可能存在问题,大量表的drop/create会导致dict_mem无限增长,几乎验证了mariadb/percona/mysql社区版本5.5,5.6,5.7各个版本,分析了各种mysql内存组成情况的脚本以及验证工具,尼玛都没找到问题。。。

尝试过将mysql 临时表从memory改到innodb,又改到myisam已验证可能存在问题,均没有发现明显问题。

有帖子又提及LOB可能会释放存在问题,仔细检查发现,业务表没有LOB类型,但似乎有定时任务不停在查询mysql.proc,需要跟开发确认原因。

某个帖子又提及5.0版本中client_statisitics中host超过16导致/tmp空间持续增长导致内存持续增长,我们用的percona server 5.6,经验证后,不是该问题所致。。不过顺带发现一个运维用python写的脚本不停地create/drop连接,要求整改了。。

线上环境基本上所有业务编写在存储过程中,一个过程套用其他五六个存储过程,各种奇葩逻辑。。。无奈只能做到运维旁边守着控制台盯着,已经排除了各种mysql服务器自身导致的问题,且验证了肯定不可能是innodb和其他服务器端可见的内存的问题之后,开始从应用程序入手,基本上连接就50个不到,有差不多一半的连接都是两个定时任务在实时更新风控相关的值,有数据更新程序就整个过程跑,不然就基本上跳过,里面使用了mysql临时表。没数据更新时虽然一直跑,但是mysql内存没有增长,到了盘中有数据之后,内存就每隔几秒nM到一二十M的增长,然后增长到了mysqld的内存占整个OS内存的90%左右,然后top RES维持在该值,VIRT开始继续增长,直到盘后的备份时因为OOM被os killed。盯着看了两天之后,本来昨天就打算在内存90%时逐台应用程序掐掉看下是不是客户端连接导致的,只是运维后来走了。。今天收市后让运维把接入机重启了下,瞬间mysqld内存占用回到了50%。问题的现状总算是可以重现了。

查看了下应用配置并跟框架确认了下,目前用的c3p0。

现在剩下的就是明天继续盯盘检查时c3p0连接配置问题所致,还是mysql临时表问题(在测试环境各个版本都模拟了,都没重现线上问题,估计不是这个问题所致是大概率),要是还不是这两个问题所致, 只能代码慢慢debug优化下去,然后再找到根本原因。

。。。严重吐槽。。。

mysql查看innodb/myisam之外内存使用情况的工具基本上没有。网上的各种什么mysqltuner.pl,my_memory,包括mysql 5.7的memory performance_schema,各种的瞎猜测。。

唯一可靠的估计就是valgrind,可惜没法attach到线上进程。。

周五继续跟踪了下,不是mysql临时表的原因,大概确定为mysql 存储过程 最后返回结果给jdbc客户端时使用了select * from ...的原因,纯粹的存储过程select并没有这个问题,这个使用mysqlslap跑了几千万次验证过。这两天具体测试是否这原因所致。

问题现在已经初步解决:应用端jdbc连接池的minIdle默认值降低,不和maxActive相同。并加上testOnBorrow=true。下午跟踪下来内存在达到65%之后,基本上不再上升,innodb大概实际使用了1.5g,最多40个并发连接左右最高触及2.4g之后基本上没有在上升,mysql进程占用的内存在56%到65%之间波动。

业务结束后调整增加minEvictableIdleTimeMillis,timeBetweenEvictionRunsMilis参数,minIdle设置为1,明后天再观察两天,确保库的稳定。

PS: mariadb 10.0.2开始,show processlist有个额外的列memory_used,可查看每个进程的内存占用。

线上mysql内存持续增长直至内存溢出被killed分析(已解决)的更多相关文章

  1. 线上Mysql数据库崩溃事故的原因和处理

    前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(八)线上Mysql数据库崩溃事故的原因和处理

    前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ...

  3. 原创 记录一次线上Mysql慢查询问题排查过程

    背景 前段时间收到运维反馈,线上Mysql数据库凌晨时候出现慢查询的报警,并把原始sql发了过来: --去除了业务含义的sql update test_user set a=1 where id=1; ...

  4. 记一次排查线上MySQL死锁过程,不能只会curd,还要知道加锁原理

    昨晚我正在床上睡得着着的,突然来了一条短信. 啥,线上MySQL死锁了,我赶紧登录线上系统,查看业务日志. 能清楚看到是这条insert语句发生了死锁. MySQL如果检测到两个事务发生了死锁,会回滚 ...

  5. JVM 常见线上问题 → CPU 100%、内存泄露 问题排查

    开心一刻 明明是个小 bug,但就是死活修不好,我特么心态崩了...... 前言 后文会从 Windows.Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前 ...

  6. 线上MYSQL同步报错故障处理总结(转)

    前言 在发生故障切换后,经常遇到的问题就是同步报错,数据库很小的时候,dump完再导入很简单就处理好了,但线上的数据库都150G-200G,如果用单纯的这种方法,成本太高,故经过一段时间的摸索,总结了 ...

  7. 一则线上MySql连接异常的排查过程

    Mysql作为一个常用数据库,在互联网系统应用很多.有些故障是其自身的bug,有些则不是,这里以前段时间遇到的问题举例. 问题 当时遇到的症状是这样的,我们的应用在线上测试环境,JMeter测试过程中 ...

  8. 如何有效的跟踪线上 MySQL 实例表和权限的变更

    介绍 从系统管理员或 DBA 的角度来讲, 总期望将线上的各种变更限制在一个可控的范围内, 减少一些不确定的因素. 这样做有几点好处: . 记录线上的库表变更; . 对线上的库表变更有全局的了解; . ...

  9. 一次线上Mysql数据库崩溃事故的记录

    文章简介 工作这几年,技术栈在不断更新,项目管理心得也增加了不少,写代码的速度也在提升,感觉很欣慰,毕竟是在一直进步,但是过程中也有许许多多的曲折,也踩过了数不尽的坑坑洼洼,从一个连百度都不知道用的萌 ...

随机推荐

  1. ASP.NET 如何发现问题的方法

    1.打开IntelliTrace,查看遇到的问题: 2.打开IE8以上,按F12,启动js调试,查看遇到的错误:

  2. 再谈LRU双链表内存管理

    N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...

  3. p范数(p norm)

    先回顾一下范数的定义(en.wikipedia.org/wiki/Norm_(mathematics)): Given a vector space V over a subfield F of th ...

  4. POJ 2887 Big String(块状链表)

    题目大意 给一个字符串,长度不超过 106,有两种操作: 1. 在第 i 个字符的前面添加一个字符 ch 2. 查询第 k 个位置是什么字符 操作的总数不超过 2000 做法分析 好多不同的做法都可以 ...

  5. Privacy Policy

    MINE Privacy Policy This unit values your privacy. You are using our service, we may collect and use ...

  6. Qt 判断文件是否存在

    包含头文件:<QFileInfo> 代码: QFileInfo file("文件路径"); if(file.exists()==false){文件不存在:}

  7. 【PRML读书笔记-Chapter1-Introduction】1.2 Probability Theory

    一个例子: 两个盒子: 一个红色:2个苹果,6个橘子; 一个蓝色:3个苹果,1个橘子; 如下图: 现在假设随机选取1个盒子,从中.取一个水果,观察它是属于哪一种水果之后,我们把它从原来的盒子中替换掉. ...

  8. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  9. IOS雕虫小技

    1,你所不知道的Mac截图的强大 2,抓包工具WireShark开发必备,需要装X11插件 3,Mac远程控制Windows桌面-CoRD.或者TeamViewer 4,Mac下解压缩BetterZi ...

  10. SuperSocket 1.6.4 通过FixedHeaderReceiveFilter解析自定义协议

    SuperSocket 提供了一些通用的协议解析工具, 你可以用他们简单而且快速的实现你自己的通信协议: TerminatorReceiveFilter (SuperSocket.SocketBase ...