post

进程与线程的一个简单解释

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。

最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

工厂
[Read more…]
post

大神手把手教你如何使用异步编程提升服务性能

作者:肖飞,2011年加入京东,目前在交易平台,主导交易平台核心系统的架构优化和技术攻关,以及公共技术组件和平台的建设。

庞大复杂的系统通常会采用服务化组件来实现。系统越复杂,组件之间的依赖和调用关系也会越复杂。对于处于底层的基础服务,直接和间接的调用所带来的流量压力非常大。处于中间层的聚合型服务,面对的挑战则是依赖的服务太多,后端个别服务的性能延迟就会影响其吞吐量。性能优化是我们系统稳定性中的重要一环,这其中,调用所依赖的RPC服务或后端数据是重点之一。

目前,除了传统JDBC这样从API到主流驱动实现就是阻塞式的类库之外,其他常用的RPC/HTTP服务、MQ、Redis、Mongodb、Kafka等系统都提供了成熟的基于NIO的客户端库,也有相应的异步API。

[Read more…]
post

Mysql占用过高CPU时的优化手段

Mysql占用CPU过高的时候,该从哪些方面下手进行优化?

占用CPU过高,可以做如下考虑:

  1. 一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processlist语句,查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引;
  2. 打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行explain分析,导致CPU过高,多数是GroupBy、OrderBy排序问题所导致,然后慢慢进行优化改进。比如优化insert语句、优化group by语句、优化order by语句、优化join语句等等;
  3. 考虑定时优化文件及索引;
  4. 定期分析表,使用optimize table;
  5. 优化数据库对象;
  6. 考虑是否是锁问题;
  7. 调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;
  8. 如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境。
  9. 可能由于内存latch(泄露)导致数据库CPU高
  10. 在多用户高并发的情况下,任何系统都会hold不住的,所以,使用缓存是必须的,使用memcached或者redis缓存都可以;
  11. 看看tmp_table_size大小是否偏小,如果允许,适当的增大一点;
  12. 如果max_heap_table_size配置的过小,增大一点;
  13. mysql的sql语句睡眠连接超时时间设置问题(wait_timeout)
  14. 使用show processlist查看mysql连接数,看看是否超过了mysql设置的连接数(http://www.cnblogs.com/kevingrace/p/6226324.html
[Read more…]
post

Struts2 两大高危安全漏洞,网站安全再受考验

近日,Struts2 被曝出两个高危安全漏洞,影响的版本Struts 2.0.0 – Struts 2.3.15的 Struts2 全系版本,国内政府、金融、运营商及各大互联网公司的网站已受影响。

一个是使用缩写的导航参数前缀时的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞。这些漏洞可使黑客取得网站服务器的“最高权限”,从而使企业服务器变成黑客手中的“肉鸡”。

Struts漏洞影响巨大,受影响站点以电商、银行、门户、政府居多,而且一些自动化、傻瓜化的利用工具开始出现,填入地址可直接执行服务器命令,读取数据甚至直接关机等操作。据乌云平台漏洞报告,淘宝、京东、腾讯等大型互联网厂商均受此影响。
[Read more…]

post

Ubuntu下搭建Java开发环境

其实类似的文章很多很多,我每次安装都会遇到不同问题,同时学会解决不少问题,每一次的问题记录下来就是一笔不小的财富。距离上一次玩Ubuntu过去一年了,最近配置了一台新台式机,就又弄起开发环境了。这台电脑也就主要用于学习Linux和一些比较流行的技术,如Redis、Nginx、Hadoop、Scribe等。

本次环境为:Ubuntu 13.04 64位 + JDK 1.6 + Tomcat 6 + Spring Tool Suite(STS)+ Subclipse 1.8

Ubuntu Java开发环境
[Read more…]