`
ahua186186
  • 浏览: 555365 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
文章列表
1.初始化NioServerSocketChannelFactory: (1)初始化并启动NioServerBoss线程:默认是1个: 第一步:通过构造函数里面的openSelector()方法创建Selector并启动一个boss线程: /** * Start the {@link AbstractNioWorker} and return the {@link Selector} that will be used for * the {@link AbstractNioChannel}'s when they get registered ...
客户端建立连接环节:(线程就像车的引擎,是RPC框架设计的关键) 1.主线程(main)初始化2个对象:ChannelFactory 和ChannelPipelineFactory (1)初始化NioClientSocketChannelFactory的3个属性:bossPool ,workerPool ,sink (new NioClientSocketPipelineSink(bossPool))并启动boss和工作线程(见文章后面的第5点) (2)初始化DefaultChannelPipeline的属性:name2ctx,tail, 2.主线程(main)通过 clientboot ...
问题1:JMX是什么? 总结:JMX是JAVA管理程序的框架。 问题1:JMX能干什么? 总结:JMX可以用来查看程序的配置信息,内存,线程,类,操作系统信息等,如JCONSOL,同时是可以操作和监控某个类的属性,前提是该属性是可读可写的。 问题3:如何操作和监控某个类的属性? 总结:自定义MBean,  最简单的实现方式就是用“基于POJO-MBean来做JMX”,也可以通过自定义注解,然后通过JMX的核心类:MBeanServer来注册即可。 问题4:实践过的场景 总结: (1)用于排查生产环境“连接池爆满”的问题 { 监控生成环境数据库连接池的使用情况 }。 (2)用JCONSOL ...
https://github.com/pftx/niolex-common-utils/tree/master/commons-notify/src
现在有两台机器A和B,分别安装了MQ6.0,我要通过MQ进行A和B之间的双向通信。 我打算分两步,第一步:实现A到B的数据传输。 在A上: 1、创建队列管理器 QM_1001。 2、创建本地队列 LQ_1001 3、创建传输队列 XQ_1001 4、创建远程队列 RQ_1002 5、创建发送方通道 1001.1002 在B上: 1、创建队列管理器 QM_1002 2、创建本地队列 LQ_1002 3、创建接收方通道 1001.1002,名字必须与发送方通道相同。 4、创建侦听器,监听1414端口 这样,A到B的数据传输就可以了。 启动队列管理器QM_1001和QM_1002,启动B上的侦听器,A ...
public class HttpClientUtil { private final static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class); private static PoolingHttpClientConnectionManager connManager = null; private static CloseableHttpClient httpclient = null; static { ...
http://valleylord.sinaapp.com/post/201409-java-heap-dump http://my.oschina.net/flashsword/blog/265442 JVM性能监控工具: http://my.oschina.net/feichexia/blog/196575

分库分表思路

总体思路和切入点:1.在spring数据访问封装层通过动态代理无侵入的扩展代码加入分库分表策略。(1)分库:通过动态代理扩展SqlSession的代码并传入分库参数来选择sqlSessionTemplate的数据源的方式实现分库策略 public abstract class SqlSessionDaoSupport implements InitializingBean { private SqlSessionFactoryBean sqlSessionFactoryBean; private Map<DataSource, SqlSessionTemplate> ...
public class ConfigManager { private static Logger logger = LoggerFactory.getLogger(ConfigManager.class); /** * 每个客户端(服务提供者和服务消费者)对应的配置中心管理者 */ private static ConcurrentHashMap<String, ConfigManager> map = new ConcurrentHashMap<String, ConfigManager>(); /** * 服务提供者注册的 ...
今天没什么事,简单测试下RPC框架性能: HSF完胜dubbo 1.dubbo测试结果: note: dubbo测试时有使用ZooKeeper,所以存在不公平性,不一定准确。 同步模型 耗时:16.808 s 平均:0.16808 ms TPS:5949.547834364588 测试数据: public class TPS_TEST { public static void main(String[] args) throws InterruptedException { final ClassPathXmlApplicationContext c ...
1.命令: mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip=true 2.编译过程中由于jar包下载可能有问题会导致编译和安装是吧: 根据提示手动删除本地maven库中的jar包重新执行命令 3转换成eclipse工程 mvn eclipse:eclipse -Dcheckstyle.skip=true
JVM 4G内存的黄金比例配置:这个配置最经典,适合web应用和JAVA应用 -server -Xms4096m -Xmx4096m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:PermSize=64m -XX:MaxPermSize=64m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=5 备注 //XX:MaxTenuringThreshold:垃圾最大年龄取值为机器核数-1,可以适当调大 XX:PermSize  和 XX:Ma ...
原理: 1.利用Memcache add操作的原子性和不替换已经存在的键的值,从而防止热点查询直接穿透到DB。 (1)memcache::add 方法:add方法用于向memcache服务器添加一个要缓存的数据。 注意:如果memcache服务器中已经存在要存储的key,此时add方法调用失败。 (2)memcache::set 方法:set方法用于设置一个指定key的缓存内容,set方法是add方法和replace方法的集合体。 大牛解释: http://timyang.net/programming/memcache-mutex/
(1)主要用于读多写少的场景,用来替代传统的同步锁,以提升并发访问性能; (2)读写锁是可重入、可降级的,一个线程获取读写锁后,可以继续递归获取;从写锁可以降级为读锁,以便快速释放锁资源; (3)ReentrantReadWriteLock支持获取锁的公平策略,在某些特殊的应用场景下,可以提升并发访问的性能,同时兼顾线程等待公平性; (4)读写锁支持非阻塞的尝试获取锁,如果获取失败,直接返回false,而不是同步阻塞,这个功能在一些场景下非常有用。例如多个线程同步读写某个资源,当发生异常或者需要释放资源的时候,由哪个线程释放是个挑战,因为某些资源不能重复释放或者重复执行,这样,可以通过tr ...
它主要用于实现volatile修饰的int变量的原子更新操作,对于使用者,必须通过类似compareAndSet或者set或者与这些操作等价的原子操作来保证更新的原子性,否则会导致问题。
Global site tag (gtag.js) - Google Analytics