公司有一台跑在VirtualBox
上的SVN服务器,时间有点久远用的还部署lvm
,最近发现磁盘满了得,加啊!
操作步骤
添加虚拟磁盘:
创建磁盘
首先 sudo fdisk -l
查看磁盘,获取到磁盘信息
开始分区 sudo fdisk /dev/sdb
希望能好好记流水账
应用部署后发现一个诡异的现象,虽通过定时器控制了应用执行时间,但是因代码中使用异步的方式去执行任务,导致代码出现不可控行为:推送消息会在凌晨发出
定时调度配置:
1 | <!-- rss定时抓取 --> |
这是典型的内网部署通过防火墙映射至公网的应用访问时序,使用单点认证需在应用服务器
配置单点服务
信息、应用服务
信息,因需要公网提供服务,都配置成公网地址,对应认证服务器地址***.94.78.76 端口 20008,应用服务器地址 ***.94.78.93 端口10004
通过公网 访问服务:http://***.94.78.93:10004/vocs
会被单点认证服务器拦截,会拼接路径: http:// ***.94.78.93:20008/xxxxx?app=vocs&url=http:// ***.94.78.93:10004/vocs
(路径只为表现功能,不代表实际路径)
项目里有发现“神奇”的代码,先不考虑代码逻辑以及实现方法是否合理,原来代码实现大致是这样:
1 | ## department 对象 |
1 | ## user 对象 |
有这样一个项目:通过单点登录集成WEB类应用,通过统一入口方式实现应用的集中访问,效果见图
但因存在多开发厂商、集成项目建设时间差异等原因,出现浏览器差异化需求,如:行文办公,因使用插件需通过ActivitiX进行加载,必须使用IE;新上线的应用,因使用的框架比较新,对低版本IE不兼容,而需要使用Chrome或火狐这样的现代浏览器,林林总总。
虽说只有考虑不到的设计没有碰不到的需求,客户说要支持,只能上啊,乙放得有乙方的承担(囧)。
more >>在使用父子表查询时,如何展示子表数据项,MySQL没有Oracle的start with 函数,但也提供了系统函数可以达到类似效果
1 | GROUP_CONCAT ([DISTINCT] expr [,expr ...] |
注:函数有默认长度限制,默认1024,如出现诡异的现象,可能是超长了记得设置: group_concat_max_len ,方法
1 | SET [SESSION | GLOBAL] group_concat_max_len = 需要的大小; |
数据库为了保证SQL能够正常执行,总会提供一些友好性来满足那些看起来对的SQL正常执行,如隐式类型转换的使用,万字不如code,来看个具体的问题
创建表
1 | create table CONVERT_SHOW |
插入模拟数据
1 | insert into CONVERT_SHOW(user_id,name)values(0,'cast'); |
前台读取表中的数据一般使用的查询SQL
1 | select USER_ID,NAME,OP_TIME from CONVERT_SHOW where USER_ID= ?; |
但会有去省事的直接以'参数值'
来替换"?"
,替换后的SQL
可能是这样的(参数有点夸张,但传递的查询值真可能什么都有)
1 | select USER_ID,NAME,OP_TIME from CONVERT_SHOW where USER_ID= '查询参数'; |
这时,隐藏的一个陷阱就可能出现:数据库为了SQL正常工作,会使用隐式类型转换使得参数变成bigint
类型,如果传递的参数不是整数会出现什么样的情况?
1 | select cast('查询参数' as UNSIGNED ) ; |
结果是:0
more >>【整理原iteye的文章 hejianhuacn.iteye.com】
使用Kettle做了个数据抓取入库的程序,简化版的静态网页爬虫,大致这个样:
使用文本调测的时候,速度大概7500条/秒,但是换上数据库后,速度只有150条/秒,对于20万左右的数据入库要超过20分钟,这让人没法接受。
more >>在使用Grant进行命令行赋权时,碰到转义符问题,发现解决文章做个转载
在MySQL中使用了下划线的数据库名,今天在GRANT的时候,死活无法为用户赋予权限,一直报错。查看了官方的文档,文档中说:如果使用下划线的数据库在使用GRANT的时候,需要对数据库的下划线进行转义
官方文档的说明如下:
1 | The “_” and “%” wildcards are permitted when specifying database names in GRANT statements that grant privileges at the global or database levels. This means, for example, that if you want to use a “_” character as part of a database name, you should specify it as “\_” in the GRANT statement, to prevent the user from being able to access additional databases matching the wildcard pattern; for example,GRANT ... ON `foo\_bar`.* TO .... |
GRANT语句用于在全局层级或数据库层级赋予权限。当在GRANT语句中指定数据库名称时,允许使用‘’和‘%’通配符。这意味着,如果您想要使用‘’字符作为一个数据库名称的一部分,您应该在GRANT语句中指定它为‘_’,以防止用户可以访问其它符合此通配符格式的数据库;例如,GRANT … ON foo\_bar
.* TO …。
说明非常明确,就是在碰到下划线和百分号的时候,为了防止GRANT的时候权限漂移,需要明确的对这两个通配符进行转义,转义符为\,因此有了如下的语句:
1 | GRANT ALL ON 'db\_test'.* TO 'test_user'; |
恩,看上去是如此的完美,但,非常遗憾的是,MySQL接受到这个语句直接报错:
1 | ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''db\_test'.* TO 'test_user'' at line 1 |
经过多次测试,终于发现这个语法应该变成:
1 | GRANT ALL ON `db\_test`.* TO 'test_user'; |
发现不同了吗?至少我当时没有发现,经过尝试才发现,转义的时候,不仅原有的通配符需要反斜杆[]进行转义,就连包含转义字串的引号也要变成反勾号!反勾号是啥?就是标准键盘中主键盘数字键1前面的那个键(也就是ESC下面的那个键)。
经过修正后的SQL语句非常顺利的执行了,类似的情况,在GRANT中需要注意的是TO后面的User,平时User字串是可以不用单引号的,但如果User字串中包含了中划线(-)的时候,或者含有通配符(%)的时候,则必须要有引号包含。
注,jdbc的url 中同样需要转义:
1 | url=jdbc:mysql://127.0.0.1:3306/db\_dev?useUnicode=true&characterEncoding=utf-8 |
最近基于socket.io写了个消息服务,使用websocket-bench 进行压力测试:
1 | websocket-bench -a 5000 -c 500 http://ip:9080 |
发现只要连接超过1000多点,就会失败:
1 | Launch bench with 5000 total connection, 500 concurent connection |
为什么会是1000多点这个数?websocket-bench 的README.md文档也特别提醒:
Tip: You may find it useful to increase the maximum number of open file descriptors on your system during testing:
ulimit -n 60000
ulimit 有什么特殊作用?网上搜到这篇文章 通过ulimit改善系统性能 ,原来是系统默认的文件打开数影响了连接数 ,通过命令 ulimit -a可以看到:
1 | core file size (blocks, -c) 0 |
open files 为 1024 大概明白为什么socket连接只能有1000多点,使用 ulimit -n 60000来调整可打开文件数,再进行测试,连接数果然就正常了
题外话 socket长连接保持着“文件”(Linux上一切都可以看成是文件)被打开,所以1024的文件连接数很快被耗尽,虽然websocket-bench 文档中也提到ulimit -n 参数调整,但是对操作系统性能类的参数了解很少,没明白什么意思,就无视了,等发现问题的时候,猜可能是该参数影响了性能,才去查资料,所以说专业的事情还真得专业的人来解决,主机工程师或者性能测试人员对这类的参数也许就比较熟悉,知道该类参数的调整,程序员碰到可能真得一头雾水,现在明白为什么高校的计算机专业需要开设操作系统的课程了,这才是基础,虽然学的也是一头雾水^_^
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true