Hugo

Hugo Hugo 是一款开源的使用 go 语言写的静态网站生成器,很适合数据量不大的个人博客使用 为何要使用静态网站生成器 (Static Site Generators) ? 不同于 WordPress 这类博客平台 (以及其他众多流行的CMS内容管理系统) 在服务器端执行PHP等语言的动态框架、访问SQL数据库并动态产生Web页面的工作方式,静态网站生成器的原理十分简单: 将所有的页面、布局和帖子集合在一起,预先生成静态的站点。对于动态内容并非必要的站点——例如个人博客,静态网站生成器这样做有几个明显的优势 快速访问和弱服务器需求 静态HTML页面的载入速度理所当然地更快——因为它无需在服务器端执行任何代码。同时,这还大大地减轻了服务器的压力。 高安全性 基于与上述相同的理由,静态页面有着与生俱来的安全性。不像WordPress或者其他任何动态的框架,静态站点本身并不存在安全漏洞的问题。 版本控制 你无需通过WordPress来维护一整个复杂的数据库——静态站点的内容完全仅由文件系统中独立的目录和文件构成,这意味着你不但可以使用Shell、grep、sed、awk这些传统的Unix工具对它们执行操作和维护,更可以使用 Git 这样的分布式版本控制系统来管理它们,并且享受版本控制所带来的一切好处,如同维护任何软件项目的源代码库一样。你甚至可以重新生成以前任意时间点的整个网站! 简单部署 一旦静态网站生成以后,任何Web服务器都能够轻易地部署静态站点,而无须在服务器端安装配置其他任何多余的东西。你所需要做的仅仅是通过git、rsync甚至ftp简单地上传文件到你的托管服务器。相比之下,WordPress博客的维护显得复杂得多,你可能需要在你的开发服务器和托管服务器上安装、配置一整套LAMP+WordPress平台,并经常性地升级版本和维护。这是个繁重的技术活。 文本编辑器和自由格式书写 也许你不这么认为,但是作为一个hacker而言,在浏览器中一个300x300的文本区里码字写博客并非一件很酷的事情——如果你使用Hugo这样的静态网站生成器,你就可以用你喜欢的任何文本编辑器 (vi、emacs……) ,用你习惯的标记语言以书写文本文件的方式来直接写博客文章 (就好像你平常写代码一样) ,避免了使用那些简陋和功能有限的Web界面。 compile # 安装 hugo pacman -S hugo # cd 到hugo工程目录 cd /path/to/markdown/doc/home # 在本地启动一个服务,测试一下,hugo会检测文档变化自动编译 hugo server # 开个浏览器看一下页面 google-chrome-stable http://localhost:1313/ hugo, plantuml https://mogeko.me/posts/zh-cn/083/

2012-11-06 · 1 min · 55 words · -

java JVM 内存问题 调查,调优

java JVM 内存问题 调查,调优 https://my.oschina.net/u/3345762/blog/1784199 https://my.oschina.net/u/3345762/blog/1644973 http://www.infoq.com/cn/articles/Troubleshooting-Java-Memory-Issues?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global http://www.importnew.com/14933.html http://lovestblog.cn/blog/2015/08/21/rssxmx/ # set jdk path export PATH=/usr/java/default/bin/:$PATH # list java process jcmd -l # show jcmd command jcmd PID help #heap dump jcmd PID GC.heap_dump /root/dump.hprof Eclipse Memory Analyzer Eclipse Memory Analyzer NMT, pmap Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss] init: represents the initial amount of memory (in bytes) that the Java virtual machine requests from the operating system for memory management during startup. The Java virtual machine may request additional memory from the operating system and may also release memory to the system over time. The value of init may be undefined. ...

2012-11-06 · 4 min · 807 words · lcf

Smalltalk

Smalltalk Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有: Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。 Smalltalk和许多程序设计语言不同,它不仅仅是一门语言。 一种面向对象的程序设计语言: 它是一种面向对象的语言,包含语言的语法和语义。一些编译器可以通过 Smalltalk 源程序产生可执行文件。这些编译器通常产生一种能在虚拟机上运行的二进制代码。Smalltalk语言本身非常精炼。 一种程序设计环境: 这里指的是一种提供许多 对象 的系统,而不是某种特殊的开发环境。和许多语言不同(包括C++),Smalltalk附带有一个巨大的、相当标准的类库。这些 类 使得开发Smalltalk程序的效率非常高。在其它语言 (例如 Ada , C 和 Pascal ) 中通常被作为语言的一部分的功能 (例如条件判断,循环等),在Smalltalk由特定的类提供。 **一个应用开发环境(ADE):**由于Smalltalk的历史原因,它具有一个非常优秀的高度集成、开放的应用开发环境。由于开发环境中的浏览器、监视器以及调试器都由同样的源程序衍生出来的,不同的版本之间也具有相当好的兼容性。此外,这些工具的源程序都可以在ADE直接存取。

2012-11-04 · 1 min · 35 words · -

线框图

线框图 线框图(Wireframe)是软件或者网站设计过程中非常重要的一个环节。线框图是整合在结构层的全部三种要素的方法: 通过安排和选择界面元素来整合界面设计;通过识别和定义核心导航系统来整合导航设计;通过放置和排列信息组成部分的优先级来整合信息设计。通过把这三者放到一个文档中,线框图可以确定一个建立在基本概念结构上的架构,同时指出了视觉设计应该前进的方向。 其实对于更小或更简单的网站来说,一个线框图就足够作为所有即将建立的页面的模板。对于大多数项目来说,无论如何,都需要用多个线框图来传达复杂的预期结果。不过,你不需要为网站的每一个页面都准备一个线框图。正如结构设计流程允许我们把内容要素总结成各个种类一样,一个数量相对较少的标准页面类型将在绘制线框图的过程中慢慢浮现。 线框图在正式建立网站的视觉设计的流程中,是必要的第一步,但是几乎每一个参与这个开发过程的人都会在一些任务点中使用它。负责战略层、范围层和结构层的设计者可以借助线框图来保证最终产品能满足他们的期望。真正负责建设这个网站的人,则使用线框图来回答关于网站应该如何运作的问题。 随着用户体验领域的不断成熟和发展,线框图的责任有时还成为企业内部某种口水战的主题。一些网站研发团队很鲜明地把这部分工作分成两个部分,由两个独立的角色 (有时候是整个部门) “信息架构师"和"设计师"来承担。

2012-11-03 · 1 min · 8 words · -

sk_buff

sk_buff sk_buff (internal networking structure used by linux kernel) sk_buff的意思是socket buffer,这是Linux网络子系统中的核心数据结构 https://liu-jianhao.github.io/2019/05/linux%E5%86%85%E6%A0%B8%E7%BD%91%E7%BB%9C%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%901sk_buff%E7%BB%93%E6%9E%84/ tcp连接的资源占用 size of sk_buff (internal networking structure used by linux kernel) the read and write buffer for a connection the size of buffers can be tweaked as required root@x:~# sysctl -A | grep net | grep mem check for these variables these specify the maximum default memory buffer usage for all network connections in kernel net.core.wmem_max = 131071 ...

2012-10-31 · 1 min · 197 words · -

Java中的instanceof关键字

Java中的instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子: String s = “I AM an Object!”; boolean isObject = s instanceof Object; 我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。 instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类: public class Bill {//省略细节} public class PhoneBill extends Bill {//省略细节} public class GasBill extends Bill {//省略细节} 在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断: public double calculate(Bill bill) { if (bill instanceof PhoneBill) { //计算电话账单 } if (bill instanceof GasBill) { //计算燃气账单 } … } 这样就可以用一个方法处理两种子类。 然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了: public double calculate(PhoneBill bill) { //计算电话账单 } public double calculate(GasBill bill) { //计算燃气账单 } ...

2012-10-31 · 1 min · 72 words · -

CDN

CDN CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。 (也就是一个服务器的内容,平均分部到多个服务器上,服务器智能识别,让用户获取离用户最近的服务器,提高速度 CDN 内容分发网络 (Content Delivery Network,简称CDN) 将源站内容分发至全国所有的节点,缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性,解决网络带宽小、用户访问量大、网点分布不均等问题

2012-10-29 · 1 min · 12 words · -

sql command

sql command -- http://www.wiloon.com/?p=1899 insert into t1 values (1,'1',1) on duplicate key update c0=c0+1; INSERT INTO "表格名" ("栏位1", "栏位2", ...) VALUES ("值1", "值2", ...);

2012-10-29 · 1 min · 24 words · lcf

Beelink SER8 archlinux

文档说明: 本文档记录 Beelink SER8 mini PC 在 Arch Linux + KDE 桌面环境下使用过程中遇到的问题、解决方案和系统操作。 亮度自动降低问题解决方案 问题描述 系统在锁屏、关闭显示器或重启后,显示器亮度会被自动调低到 30% 左右,且不会自动恢复。 环境信息 设备: Beelink SER8 (mini PC) 系统: Arch Linux 桌面环境: KDE Plasma 亮度控制: DDC/CI (通过 ddcutil) 解决方案 方案 1: 禁用 KDE 的自动亮度调节 (推荐) 打开 KDE 系统设置: systemsettings5 导航到: 电源管理 (Power Management) → 节能 (Energy Saving) 检查以下设置: 取消勾选 “当空闲时降低屏幕亮度” (Dim screen when idle) 取消勾选 “在锁定屏幕时降低亮度” (Dim screen on lock) 在 “屏幕亮度” 部分,将所有电源模式下的亮度设置为你想要的值(如 100%) 点击 “应用” 保存设置 ...

2012-10-29 · 20 min · 4151 words · lcf

golang 读系统环境变量

golang 读系统环境变量 http://studygolang.com/articles/3387 os.Setenv("FOO", "1") fmt.Println("FOO:", os.Getenv("FOO"))

2012-10-29 · 1 min · 7 words · lcf

共识算法,一致性算法, consensus algorithm

共识算法,一致性算法, consensus algorithm PoW,PoS,DPoS,PBFT,Paxos,Raft 分布式一致性算法-Paxos、Raft、ZAB、Gossip https://zhuanlan.zhihu.com/p/130332285 ZAB算法 说明:ZAB也是对Multi Paxos算法的改进,大部分和raft相同 和raft算法的主要区别: 对于Leader的任期,raft叫做term,而ZAB叫做epoch 在状态复制的过程中,raft的心跳从Leader向Follower发送,而ZAB则相反。

2012-10-26 · 1 min · 12 words · -

Git 库空间优化/清理

Git 库空间优化/清理 git仓库过大会导致哪些问题? git仓库体积过大,占用电脑本地闪存的存储空间; clone git仓库时,耗时过长,甚至完全clone不下来导致git报错; git pull时会由于引用对象过多会报错,导致本地代码无法更新; 在切换分支的时候经常会出现cpu占满,内存占满的情况导致电脑死机; 作者:江霖丶 链接:https://juejin.cn/post/7024922528514572302 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Git库随着使用时间的延续,空间会不断增长,但实际代码其实只占很小的空间,更多的是git库本身的归档文件,其中包括已删除的文件纪录。Git优化的本质就是清除已删除文件的归档历史,并重写commit记录。 另外可以将git中变化很少,与代码无关的文件移除,如一些资源文件,放到统一的位置,可以减小很大一部分空间占用。 克隆远程库到本地 $ git clone remote-url 用下面的脚本获取所有分支. !/bin/bash for branch in git branch -a | grep remotes | grep -v HEAD do git branch –track ${branch##*/} $branchdone done 现在你拥有了远程git库的完整克隆,可先在本地进行一些测试、验证工作。 分析git库 代码文件一般都很小,Git库的优化主要从大文件入手。 用下面的脚本可以找出git归档记录中排名前十的大文件,包括已删除的文件。 !/bin/bash set -x Shows you the largest objects in your repo’s pack file Written for osx @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ @author Antony Stubbs set the internal field spereator to line break, so that we can iterate easily over the verify-pack output IFS=$’\n'; ...

2012-10-26 · 2 min · 280 words · -

dictionary

dictionary ‘CMMI 配置库’ 配置项,就一个项目整个的生命周期过程中,所产生的一切文档、程序以及需要进行控制的项目。 那么这些配置项所保存、管理的一个地方,就叫配置库。 配置库,有逻辑上的意义,也有物理上的意义 逻辑上,就是上文所说的 物理上,就是一些用来做配置管理的软件系统,比如说VSS之类 通过这些配置管理软件,对配置项进行管理和控制,那么整个软件系统就可以称作配置库。 阿特金森循环 这一名词早在1880年就存在了.是一种高压缩比,长膨胀行程的内燃机工作循环。 因为这种循环结构比较复杂,所以大家都选用了奥托循环式的发动机. 发动机理论最典型的就是吸气-压缩-燃烧膨胀-排气的循环.而奥托注册了许多专利,所以阿特金森不得不研发一种不使用正时带和凸轮轴的内燃机. 阿特金森发动机巧妙的只用一个飞轮带曲柄连杆机构实现了4个冲程. 阿特金森发动机的特点是使燃烧在气缸中的油/气混合物的体积膨胀得更大,借此让动力装置能更高效地利用燃油。 而现代阿特金森循环发动机(Atkinson cycle engine)使用电子控制装置和进气阀定时装置,通过推迟进气门关闭,在压缩冲程从进气门排出部分燃气,减少进气量,从而实现膨胀比大于压缩比,提高燃油利用率,达到节油的目的。 马克思发生器 马克思发生器 (Marx Generator) 是一种利用电容并联充电再串联放电的高压装置,该结构由E.Marx于1924年提出,它能模仿雷电及操作过电压等过程。 所以经常用于绝缘冲击耐压及介质冲击击穿、放电等试验中。 Mercurial Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。相对于传统的版本控制,具有如下优点: 更轻松的管理。 传统的版本控制系统使用集中式的 repository,一些和 repository 相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial 中就没有这样的困扰,每个用户管理自己的 repository,管理员只需协调同步这些repository。 更健壮的系统。 分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。 对网络的依赖性更低。 由于同步可以放在任意时刻进行,Mercurial 甚至可以离线进行管理,只需在有网络连接时同步。 Redmine Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放 源码软件解决方案,它提供集成的项目管理功能,问题跟踪,并为多个版本控制选项的支持。 虽说像IBM Rational Team Concert的商业项目调查工具已经很强大了,但想坚持一个自由和开放源码的解决方案,可能会发现Redmine是一个有用的Scrum和敏捷的选择。 由于Redmine的设计受到Rrac的较大影响,所以它们的软件包有很多相似的特征。 Redmine建立在Ruby on Rails的框架之上,支持跨平台和多种数据库。。 Erlang Erlang 是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的 CS-Lab 开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。 使用 Erlang 编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的: 对于程序来说并不知道自己是在分布式运行。 Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。 Yaws: 一个Erlang写的服务器,据说并发性能是apache的15倍Erlang得名于丹麦数学家及统计学家Agner Krarup Erlang,同时Erlang还可以表示Ericsson Language。 ...

2012-10-26 · 4 min · 645 words · -

tomcat启动jvm内存设置

tomcat启动jvm内存设置 配置tomcat调用的虚拟机内存大小 (1) 直接设置tomcat Linux 修改TOMCAT_HOME/bin/catalina.sh 位置cygwin=false前。 JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" (仅做参考,具体数值根据自己的电脑内存配置) windows 修改TOMCAT_HOME/bin/catalina.bat 第一行加上 JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" (2) 配置环境变量 环境变量中设 变量名: JAVA_OPTS 变量值: -Xms512m -Xmx512m https://www.cnblogs.com/oskyhg/p/6549877.html

2012-10-25 · 1 min · 30 words · -

automation test tools

automation test tools 在世面上的自动化测试工具很多。有开源的,有商业化的,各有各得特色,各有各得优点!下面我就介绍几个我用过的开源自动化测试工具。 1 测试 WEB SELENIUM可以说是测试WEB最全面的开源自动化工具, 它可以在WINDOWS, LINUX, MAC 和 SOLARIS 上运行, 而且可以几乎用任何一种编程语言进行构建, 你可以用你熟悉的语言包括 JAVA, C#, PERL, PHP, PYTHON 和 RUBY。 它可以测试的浏览器有IE, FIREFOX, OPERA 和 SAFARI。 SELENIUM 家族成员有: SELENIUM, SELENIUM RC, SELENIUM IDE, SELENIUM CORE, SELENIUM GRID 和 SELENIUM ON RAILS。 GOOGLE 每天都要在他的TESTING FARM上跑几万个SELENIUM测试CASE,现在也些会更多,你如果想学习SELENIUM, 可以从这里开始 http://selenium.seleniumhq.org/ **tellurium ** 这个框架是从Selenium框架{#ex48}发展而来,但又具有不同的测试理念。大多数Web测试框架,比如Selenium,主要致力于单独的UI元素。而Tellurium恰好相反,它把多个UI元素看作一个Widget整体,并将其称作UI module。

2012-10-24 · 1 min · 52 words · -

细化解析 不同类型数据库的死锁问题

细化解析 不同类型数据库的死锁问题 论坛中有很多关于死锁问题的讨论,在理论方面,R.Ramakrishnan的《Database management systems》也有非常精辟的阐述。就实际开发而言,不同的数据库环境有着不同的处理方法,不同的体系架构也会导致不同的结果,下面来简单介绍一下不同类型数据库的死锁问题。 1.MSSQL、DB2、Oracle之类的现代DBMS或者中间件可以帮助我们自动解决绝大部分死锁,其余一部分难以处理的死锁则由DBA在数据库控制端手工处理。就应用程序而言,不需要在源代码级过多考虑地考虑死锁问题。 2.死锁的发生对系统的性能和吞吐量有着明显的影响,但只要存在针对共享数据资源的大规模并发访问的情况,那么死锁是不可避免的。 理论上,预防死锁的最好的途径是: 给每一个transaction设定一个优先级,同时确保较低优先级的事务不必等待较高优先级事务释放共享资源,反过来,也确保较高优先级的事务能够立刻取得相应的资源。如果开发人员无法判别事务的优先级,那么可以考虑在每个事务开始时赋予它一个的时间戳,依据时间戳的先后来判定事务的优先级,这类似于FIFO队列。在这方面,现代DBMS都提供了相应的语言支持。但是,假设由于网络故障而导致高优先级的事务无法commit或者rollback,那么是否其他低级别事务便要一直等待或者被抛弃?或者一个事务中的update操作施加了多个表级锁,并且占用了大量时间,那么即便这种事务从逻辑上并不合理,是否也要保持它的高优先级? 针对稀缺资源的竞争在任何场合都是正常的,死锁出现的因果关系给予我一个提示,就是不能盲目地依赖DBMS和DBA在死锁发生后再去解决死锁问题,那样必然已经对用户体验造成了消极影响。开发人员在设计过程中,需要更多地研判可能的并发访问问题。这些问题可能包括: 尽可能缩短事务。在同一DB中并发执行多个需要长时间运行的事务时,发生死锁的概率较大。事务运行时间越长,其持有exclusive锁或update锁的时间便越长,从而堵塞了其它活动并可能导致死锁。保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁。同时,涉及多个表的查询更新操作,若比较耗时,尽量不要放在一个事务内处理,能分割便分割。若不能分割,便尽可能使之在业务量较小的时间(例如子夜或者午餐时间)执行。 尽可能按同一顺序访问数据对象。如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。 避免编写包含用户交互的事务。因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,若用户不能及时反馈,则此事务将挂起。因而将严重降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。 使用低隔离级别。确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取 (未修改) 的数据,而不必等待第一个事务完成。使用较低的隔离级别 (例如提交读) 而不使用较高的隔离级别 (例如可串行读) 可以缩短持有共享锁的时间,从而降低了锁定争夺。 考虑体系结构的优化与代码重构,提高系统整体的运行效率。例如尽可能不要采用类似EJB的效率低下的计算模型,或者将复杂的业务置于编译存储过程中执行。 通过程序控制事务提交的时机。如果一次检索出了10万条记录但只更改了其中的100条,就可以通过代码来执行100个update。或是用分段提交,即所有的修改使用多个事务进行提交,但这样会使事务不完整,应酌情使用。 将经常更新的数据库和查询数据库分开。定期将不改变的数据导入查询数据库中,这样查询和更新就可以分开进行,而降低死锁机率。 在进行数据库模式设计时,注意外键引用的完整性,并对外键加索引。如果更新了父表的主键,由于外键上没有索引,所以子表会被锁定;如果删除了父表中的一行,整个子表也会被锁定。

2012-10-24 · 1 min · 24 words · lcf

六个方法解决应用程序中死锁现象的出现

六个方法解决应用程序中死锁现象的出现 在应用程序中就可以采用下面的一些方法来避免死锁: (1) 合理安排表访问顺序。 (2) 在事务中尽量避免用户干预,尽量使一个事务处理的任务少些, 保持事务简短并在一个批处理中。 (3) 数据访问时域离散法, 数据访问时域离散法是指在客户机/服务器结构中,采取各种控制手段控制对数据库或数据库中的对象访问时间段。主要通过以下方式实现: 合理安排后台事务的执行时间,采用工作流对后台事务进行统一管理。工作流在管理任务时,一方面限制同一类任务的线程数 (往往限制为1个) ,防止资源过多占用; 另一方面合理安排不同任务执行时序、时间,尽量避免多个后台任务同时执行,另外, 避免在前台交易高峰时间运行后台任务。 (4) 数据存储空间离散法。数据存储空间离散法是指采取各种手段,将逻辑上在一个表中的数据分散到若干离散的空间上去,以便改善对表的访问性能。主要通过以下方法实现: 第一,将大表按行或列分解为若干小表; 第二,按不同的用户群分解。 (5) 使用尽可能低的隔离性级别。隔离性级别是指为保证数据库数据的完整性和一致性而使多用户事务隔离的程度,SQL92定义了4种隔离性级别: 未提交读、提交读、可重复读和可串行。如果选择过高的隔离性级别,如可串行,虽然系统可以因实现更好隔离性而更大程度上保证数据的完整性和一致性,但各事务间冲突而死锁的机会大大增加,大大影响了系统性能。 (6) 使用绑定连接, 绑定连接允许两个或多个事务连接共享事务和锁,而且任何一个事务连接要申请锁如同另外一个事务要申请锁一样,因此可以允许这些事务共享数据而不会有加锁的冲突。

2012-10-24 · 1 min · 25 words · lcf

如何解决数据库中的死锁问题

如何解决数据库中的死锁问题 说道死锁问题的解决,一般情况下我们都是选择KILL进程,但如果不查出引起死锁的原因,死锁的现象则会频繁出现,其实只要通过查找引起死锁的操作,就可以方便的解决死锁。 **具体的解决方法如下: ** 1.再死锁发生时,我们可以通过下面的语法,查询到引起死锁的操作: use master go declare @spid int,@bl int DECLARE s_cur CURSOR FOR select 0 ,blocked from (select * from sysprocesses where blocked>0 ) a where not exists(select * from (select * from sysprocesses where blocked>0 ) b where a.blocked=spid) union select spid,blocked from sysprocesses where blocked>0 OPEN s_cur FETCH NEXT FROM s_cur INTO @spid,@bl WHILE @@FETCH_STATUS = 0 begin if @spid =0 select ‘引起数据库死锁的是: ‘+ CAST(@bl AS VARCHAR(10)) + ‘进程号,其执行的SQL语法如下’ ...

2012-10-24 · 2 min · 220 words · lcf

死锁 (Deadlocks)

死锁 (Deadlocks) deadlocks (死锁) 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。 一种情形,此时执行程序中两个或多个线程发生永久堵塞 (等待) ,每个线程都在等待被其他线程占用并堵塞了的资源。例如,如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发生了死锁现象。 计算机系统中,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。 产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则 就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 产生死锁的四个必要条件: (1) 互斥条件: 一个资源每次只能被一个进程使用。 (2) 请求与保持条件: 一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之 一不满足,就不会发生死锁。 死锁的解除与预防: 理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和 解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确 定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态 的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配 。因此,对资源的分配要给予合理的规划。

2012-10-24 · 1 min · 39 words · lcf

agile scrum tools

agile scrum tools Trello wekan https://github.com/wekan/wekan podman run -d --name wekan-db -p 27017:27017 mongo:4.4 podman run -d --name wekan -e "WITH_API=true" -e "MONGO_URL=mongodb://192.168.50.13:27017/wekan" -e "ROOT_URL=http://192.168.50.13:2000" -p 2000:8080 wekanteam/wekan:v5.41 podman run -d --name wekan-db -p 27017:27017 mongo:5.0.9 podman run -d --name wekan -e "WITH_API=true" -e "MONGO_URL=mongodb://192.168.50.16:27017/wekan" -e "ROOT_URL=http://192.168.50.16:2000" -p 2000:8080 wekanteam/wekan:v6.30 Rally 商业软件用户使用率排名第二位!支持用户需求的筛选、扩展的筛选标准、改进版本剩余时间表、新的通知规则 (notification rules) ,以及用于Eclipse和CruiseControl.NET的连接器。 有免费在线试用体验版本. VersionOne 商业化产品!没什么好说的,业界老大 从 功能上看,的确非常新颖,贯彻了敏捷中的User Story为先的原则,和VSTS类似,将Issues、Defect、Task合并概念成为Task(在VSTS中更加优雅,叫做WorkItem), 并且必须挂在UserStory下,这个工具值得看看,有试用版可以下载,或者可以使用他们在线提供的试验平台 基于ASP.NET and IIS和 SQL。 团队可以使用"V1: 敏捷团队"来管理产品和sprint backlog,通过交互式的"任务板 (taskboards) “和"测试板 (testboards) " 进行每日开发活动,藉由报表和燃烧图查看进度,以及其他活动。 通过这些功能,“V1: 敏捷团队"的用户可以做到: ...

2012-10-24 · 2 min · 252 words · -