tomcat8性能优化参考

  1)内存优化(调整配置堆的大小,修改文件:catalina.sh) JAVA_OPTS=”-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -XX:MinHeapFreeRatio=80 -XX:MaxHeapFreeRatio=80 -XX:ThreadStackSize=512 -XX:NewSize=128m -XX:MaxPermSize=64m -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+UseConcMarkSweepGC -XX:+ScavengeBeforeFullGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/performance_gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/performance_heapdump.hprof -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true” 开启飞行记录...

Tomcat 7优化配置参数

摘要: Tomcat在使用的过程中会遇到很多报错,有些是程序的报错,但还有一部分是tomcat本身的报错,我们可以通过优化tomcat的初始配置来提高tomcat的性能。Tomcat的优化主要体现在两方面:内存、并发连接数。 Tomcat在使用的过程中会遇到很多报错,有些是程序的报错,但还有一部分是tomcat本身的报错,我们可以通过优化tomcat的初始配置来提高tomcat的性能。Tomcat的优化主要体现在两方面:内存、并发连接数。 1、内存优化: 优化内存,主要是在bin/catalina.bat/sh 配置文件中进行。linux上,在catalina.sh中添加: JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M" 其中: • -server:启用jdk的server版本。 • -Xms:虚拟机初始化时的最小堆内存。 • -Xmx:虚拟机可使用的最大堆内存。 #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落 • -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。...

mysql导入导出sql文件

window下 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump...

腾讯云服务器创建swap空间

腾讯云服务器(学生优惠版)安装系统的时候,并没有挂载swap分区。但是我想对数据盘进行分区的时候,发现默认把整个磁盘都用上了,并没用预留空间。swap分区是行不通了,只能试试swap文件。   1.建立一个有连续空间的空白文件 root@VM-40-223-ubuntu:/# mkdir swap(注意,我第一次将SWAPFILE文件建立在/dev文件夹下会发生错误,所以我们在根目录下新建一个文件夹)   2.服务器的物理内存是1024MB,按照1~2倍原则,我将swap文件设置为1GB。 root@VM-40-223-ubuntu:/swap# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied,...

小红书在容器环境的CD实践

2017-10-12 孙国清 Go中国 前言 容器推出以来,给软件开发带来了极具传染性的振奋和创新,并获得了来自各个行业、各个领域的巨大的支持——从大企业到初创公司,从研发到各类IT人员等等。跨境知名电商小红书随着业务的铺开,线上部署单元的数量急剧增加,以 Jenkins 调用脚本进行文件推送的部署模式已经不能适应需求。这一期实践日,小红书运维团队负责人孙国清将为大家带来小红书如何以最小的投入,最低的开发量快速的实现容器化镜像部署,以及由此带来的收益。以下是此次演讲的整理。 作者介绍 孙国清 小红书运维团队负责人 浙大计算机系毕业,曾在传统企业 IT 部门工作多年, 最近几年开始在互联网行业从事技术及技术管理工作,曾就职于携程基础架构,负责 Linux 系统标准化及分布式存储的研究和落地,目前在小红书带领运维团队,负责业务应用,基础架构以及IT支持。个人接触的技术比较杂,从开发到运维的一些领域都有兴趣,是 Scala 语言的爱好者,曾翻译了”The Neophyte’s Guide to Scala”,有上千 Scala 开发者从中受益,到小红书后开始负责系统化落地 DevOps 和提高运维效率。 小红书...

MyCat:开源分布式数据库中间件

摘要:MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。本文带你全面了解MyCat。 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。2014年MyCat首次在上海的《中华架构师》大会上对外宣讲引发围观,更多的人参与进来,随后越来越多的项目采用了MyCat。 MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。 MyCat是什么? 从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。 MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度 图1 MyCat架构设计图 MyCat解决了哪些问题 1. 连接过多问题,可以通过MyCat统一管理所有的数据源,后端数据库集群对前端应用程序透明。使用MyCat之前系统结构如图2。 图2  MyCat早前系统架构 MyCat引入连接复用解决多应用竞争问题,通过MyCat改造后,如图3所示。 图3  改造后的MyCat 2. 独创的ER关系分片,解决E-R分片难处理问题,存在关联关系的父子表在数据插入的过程中,子表会被MyCat路由到其相关父表记录的节点上,从而父子表的Join查询可以下推到各个数据库节点上完成,这是最高效的跨节点Join处理技术,也是MyCat首创。 图4  独创的ER关系分片,是MyCat首创 3. 采用全局分片技术,每个节点同时并发插入和更新数据,每个节点都可以读取数据,提升读性能的同时,也解决跨节点Join的效率。...

Mycat高级进阶—Mycat注解

注解原理 概念: MyCat对自身不支持的Sql语句提供了一种解决方案——在要执行的SQL语句前添加额外的一段由注解SQL组织的代码,这样Sql就能正确执行,这段代码称之为“注解”。注解的使用相当于对mycat不支持的sql语句做了一层透明代理转发,直接交给目标的数据节点进行sql语句执行,其中注解SQL用于确定最终执行SQL的数据节点。注解的形式是: /*!mycat: sql=注解Sql语句*/ 1 注解的使用方式是: /*!mycat: sql=注解Sql语句*/真正执行Sql 1 使用时将=号后的“注解Sql语句”替换为需要的Sql语句即可,后面会提到具体的用法。 原理: MyCat执行SQL语句的流程是先进行SQL解析处理,解析出分片信息(路由信息)后,然后到该分片对应的物理库上去执行;若传入的SQL语句MyCat无法解析,则MyCat不会去执行;而注解则是告诉MyCat按照注解内的SQL(称之为注解SQL)去进行解析处理,解析出分片信息后,将注解后真正要执行的SQL语句(称之为原始SQL)发送到该分片对应的物理库上去执行。 从上面的原理可以看到,注解只是告诉MyCat到何处去执行原始SQL;因而使用注解前,要清楚的知道该原始SQL去哪个分片执行,然后在注解SQL中也指向该分片,这样才能使用!例子中的sharding_id=10010 即是指明分片信息的。 需要说明的是,若注解SQL没有能明确到具体某个分片,譬如例子中的注解SQL没有添加sharding_id=10010这个条件,则MyCat会将原始SQL发送到persons表所在的所有分片上去执行去,这样造成的后果若是插入语句,则在多个分片上都存在重复记录,同样查询、更新、删除操作也会得到错误的结果! 解决问题: MySql不支持的语法结构,如insert …select… 同一个实例内的跨库关联查询,如用户库和平台库内的表关联 存储过程调用。 表,存储过程创建。 注解规范 注解SQL使用select语句,不允许使用delete/update/insert等语句;虽然delete/update/insert 等语句也能用在注解中,但这些语句在Sql处理中有额外的逻辑判断,从性能考虑,请使用select语句...

MyCat1.6带返回参数存储过程调用示例

本例环境:SpringMVC3.x + Mybatis3.x + Mycat1.6 + Mysql5.6 1、创建带出参存储过程 [sql] view plain copy DELIMITER && CREATE  PROCEDURE `test_proc`( in a_id int , out a_goods_id int) BEGIN               SELECT  a.goods_id  INTO  a_goods_id               FROM  es_goods_community a               WHERE  a.id=a_id ; END && DELIMITER ; 备注:这里的存储过程比较简单,就是根据一个表的ID,返回一个表的另外一个字段,本例中a_goods_id为出参。 2、mybatis映射文件 [html] view plain copy <select id=“testCallProc” resultType=“java.lang.Integer”>  <!– statementType=”CALLABLE” –>          <![CDATA[        /*!mycat:sql=select 1 from es_goods_community where seller_id=26*/{call test_proc(...

MyCat不支持的SQL语句

已知的MyCat不支持的SQL语句类型如下(不完全统计,后续会更新):   SELECT: Ø 跨分片(实体库)的交叉查询 Ø 跨节点的联合查询 (如用户库的表和平台库的表做联合查询) INSERT: Ø 插入的字段不包含分片字段 (如插入tbl_user_base_info表,没有提供user_id列) Ø 插入的分片字段找不到对应分片 Ø 复制插入Insert into…select… Ø 多行插入 insert into tab_a(c1,c2) values(v1,v2),(v11,v21)… UPDATE: Ø 更新的列包含分片列 Ø 多表更新 update a, b set a.nation=’China’, b.pwd=’123456’ where a.id=b.id Ø 复杂更新 update a, b set a.nation=’China’ where a.id=b.id;  但支持子查询方式 update a set a.nation=’China’ where id in (select id from b); DELETE: Ø 复杂删除 delete a from a join b on a.id=b.id;  支持子查询方式 delete from a where a.id in (select id from b), 但表不能起别名 其它: Ø Call procedure()   MyCat未支持存储过程定义, 因而不允许调用存储过程,但可通过注解来调用各个分片上的存储过程 Ø Select func(); 不支持这种方式直接调用自定义函数, 但支持 select id, func() from employee 只需employee所在的所有分片上存在这个函数。MySql自带函数可随意使用。     注意事项: Ø Order by字段必须出现在select中(MyCat先将结果取出,然后排序) Ø Group by务必使用标准语法 select count(1),type from tab_a group by type; Ø MyCat的一些自带函数 sum,min,max等可以正确使用,但多分片执行的avg有bug,执行的结果是错误的...

vue-cli怎么根据后端接口服务器不同 build不同接口代码?

琢磨了几天vue-cli生成的代码,vue觉得你只需要三种配置:开发(npm run dev)、生产(npm run build)和单元测试(npm run test)。。。 吐槽完。 1.打开config/index.js,修改build里面的env文件名为根据环境变量获取, 修改完大概是下面这样子: module.exports = { build: { env: require('./'+(process.env.VUE_CONFIG||'prod')+'.env'), //...... 2.在config目录里面把prod.env.js复制两份,分别是uat.env.js、testing.env.js 3.修改dev.env.js、uat.env.js、testing.env.js、prod.env.js这四个文件,在大括号里面添加API: '"/api或uat或其他什么"',如下: module.exports = { NODE_ENV:...