一次OOM问题定位过程
MySql 锁机制
锁是什么
锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
防止更新丢失,并不能单靠数据库事务控制器来解决,需要应用程序对要更新的数据加必要的锁来解决。
Zookeeper概述
ZooKeeper是一个用于分布式应用的开源分布式协调服务。它提供了简单的原语集合,分布式应用可在这些原语之上构建用于同步、配置维护、分组和命名的高层服务。ZooKeeper的设计使得编程容易,并且使用类似于广泛熟知的文件系统目录树结构的数据模型。它运行在Java环境中,但是有Java和C语言绑定。分布式协调服务是出了名的难得编写正确,很容易出现竞争条件和死锁之类的错误。ZooKeeper的动机是减轻为分布式应用开发协调服务的负担。
Vgrant使用入门
前面讲了Vagrant的几个命令:
- vagrant box add 添加box的操作
- vagrant init 初始化box的操作
- vagrant up 启动虚拟机的操作
- vagrant ssh 登录虚拟机的操作
Vagrant安装配置
实际上Vagrant只是一个让你可以方便设置你想要的虚拟机的便携式工具,它底层支持VirtualBox、VMware甚至AWS作为虚拟机系统,本书中我们将使用VirtualBox来进行说明,所以第一步需要先安裝Vagrant和VirtualBox。
Vagrant介绍
虚拟开发环境
平常我们经常会遇到这样的问题:在开发机上面开发完毕程序,放到正式环境之后会出现各种奇怪的问题:描述符少了、nginx配置不正确、MySQL编码不对、php缺少模块、glibc版本太低等。
所以我们就需要虚拟开发环境,我们虚拟和正式环境一样的虚拟开发环境,而随着个人开发机硬件的升级,我们可以很容易的在本机跑虚拟机,例如VMware、VirtualBox等。因此使用虚拟化开发环境,在本机可以运行自己喜欢的OS(Windows、Ubuntu、Mac等),开发的程序运行在虚拟机中,这样迁移到生产环境可以避免环境不一致导致的莫名错误。
时间管理
什么是时间管理
时间管理(Time Management)就是用技巧、技术和工具帮助人们完成工作,实现目标。时间管理并不是要把所有事情做完,而是更有效的运用时间。时间管理的目的除了要决定你该做些什么事情之外,另一个很重要的目的也是决定什么事情不应该做;时间管理不是完全的掌控,而是降低变动性。时间管理最重要的功能是透过事先的规划,做为一种提醒与指引。
https://zh.wikipedia.org/zh-cn/%E6%97%B6%E9%97%B4%E7%AE%A1%E7%90%86
时间的管理最重要的在于能够集中自己的大的整块时间进行某些问题的处理。
Zookeeper学习曲线
ZooKeeper 介绍
http://zookeeper.apache.org/
https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
akka
https://doron.gitbooks.io/akka-doc-zh/content/index.html
http://developer.lightbend.com/guides/akka-quickstart-java/
http://doc.akka.io/docs/akka/current/java/guide/index.html
https://github.com/jasonqu/akka-doc-cn