线上mysql内存持续增长直至内存溢出被killed分析(已解决)
来新公司前,领导就说了,线上生产环境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分析(已解决)的更多相关文章
- 线上Mysql数据库崩溃事故的原因和处理
		前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ... 
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(八)线上Mysql数据库崩溃事故的原因和处理
		前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ... 
- 原创  记录一次线上Mysql慢查询问题排查过程
		背景 前段时间收到运维反馈,线上Mysql数据库凌晨时候出现慢查询的报警,并把原始sql发了过来: --去除了业务含义的sql update test_user set a=1 where id=1; ... 
- 记一次排查线上MySQL死锁过程,不能只会curd,还要知道加锁原理
		昨晚我正在床上睡得着着的,突然来了一条短信. 啥,线上MySQL死锁了,我赶紧登录线上系统,查看业务日志. 能清楚看到是这条insert语句发生了死锁. MySQL如果检测到两个事务发生了死锁,会回滚 ... 
- JVM 常见线上问题 → CPU 100%、内存泄露 问题排查
		开心一刻 明明是个小 bug,但就是死活修不好,我特么心态崩了...... 前言 后文会从 Windows.Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前 ... 
- 线上MYSQL同步报错故障处理总结(转)
		前言 在发生故障切换后,经常遇到的问题就是同步报错,数据库很小的时候,dump完再导入很简单就处理好了,但线上的数据库都150G-200G,如果用单纯的这种方法,成本太高,故经过一段时间的摸索,总结了 ... 
- 一则线上MySql连接异常的排查过程
		Mysql作为一个常用数据库,在互联网系统应用很多.有些故障是其自身的bug,有些则不是,这里以前段时间遇到的问题举例. 问题 当时遇到的症状是这样的,我们的应用在线上测试环境,JMeter测试过程中 ... 
- 如何有效的跟踪线上 MySQL 实例表和权限的变更
		介绍 从系统管理员或 DBA 的角度来讲, 总期望将线上的各种变更限制在一个可控的范围内, 减少一些不确定的因素. 这样做有几点好处: . 记录线上的库表变更; . 对线上的库表变更有全局的了解; . ... 
- 一次线上Mysql数据库崩溃事故的记录
		文章简介 工作这几年,技术栈在不断更新,项目管理心得也增加了不少,写代码的速度也在提升,感觉很欣慰,毕竟是在一直进步,但是过程中也有许许多多的曲折,也踩过了数不尽的坑坑洼洼,从一个连百度都不知道用的萌 ... 
随机推荐
- 架构模式之REST架构
			直至今日,分布式系统(Distributed System)已经取得了大规模的应用,特别是Web的发展,已经给软件开发带来了翻天覆地的变化,这一点已经毋庸置疑了. 构建分布式系统常用的技术通常就是使用 ... 
- CentOS 7 Vmware虚拟机 /root空间不足解决方法(使用gparted live)
			1,关闭虚拟机,编辑虚拟机设置,增加虚拟磁盘的大小,我这里增加10GB 2,连接CDrom到ISO文件(gparted-live-0.19.0-1-i486.iso),使用gparted live启动 ... 
- MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)
			MVC .EF 学习有大半年了,用的还不是很熟练,正好以做这样一个简单的权限管理系统作为学习的切入点,还是非常合适的. 开发环境: VS 2013 + Git + MVC 5 + EF 6 Code ... 
- SQLServer 获得所有表结构(包括表名及字段)
			then d.name else null end) 表名, a.colorder 字段序号,a.name 字段名, ( then '√'else '' end) 标识, (case when (SE ... 
- EventBus使用介绍
			EventBus是Android下高效的发布/订阅事件总线机制.作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程 ... 
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】
			编者按]随着近来软件规模的日益庞大,API编程接口的设计变的越来越重要.良好的接口设计可以降低系统各部分之间的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合度,从而提高系统的维护性和稳定性. J ... 
- [原]编译Android源码过程中遇到的问题
			编译Android源码的过程参考Android官网介绍: 1.下载Android源码的步骤:https://source.android.com/source/downloading.html 2.编 ... 
- 测试GeoGebra博客
			已知函数 \(\textit{f}(\textit{x})=2\textit{m}\ln\textit{x}-\textit{x}^2\), \(\textit{g}(\textit{x})=\tex ... 
- aliyun ubuntu mysql
			http://www.codingyun.com/article/38.html ------------ python install mysql module ubuntu下mysql-pytho ... 
- Apache 配置多端口网站
			跳过安装步骤. 1. apache安装目录/conf/httpd.conf,如果你是采用wamp集成环境,那么在 wamp/bin/apache下. 2. 在httpd.conf中,找到 #LoadM ... 
