我们使用Windows都知道,整个Windows和微软提供的应用软件的稳定性和崩溃后的体验是逐步提升的。在大牛的作品《软件调试》 中有描述。
在Windows下,软件出错,常见的报告手段:
1、事件日志:这里记录了很多关键的错误信息
2、崩溃报告:可以自动提交错误的信息,或者手动提交,以不断的改进软件和方便排错
3、专用的日志工具:如Netmon,sysinternal等
那我们的软件在崩溃后如何处理呢?主要目的:
1、方便我们的排错
2、提供更好的使用体验
最近在设计一个应用系统时对这个问题进行处理。
这方面有比较多的参考:
首先在stackoverflow上可以看到,c++ release program crashes report
以上有比较多的框架和工具
Windows应用程序处理的一个框架和详细参考资料
Integrating Crash Reporting into Your Application - A Beginners Tutorial
http://www.codeproject.com/Articles/308634/Integrating-Crash-Reporting-into-Your-Application
http://code.google.com/p/crashrpt/
http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Minidu
Google breakPad
Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Linux和Mac和Solaris。由于他本身跨平台,所以很大的减少我们在平台移植时的工作,毕竟崩溃转储,每个平台下都不同,使用起来很难统一,而Google breakpad就帮我们做到了这一点,不管是哪个平台下的崩溃,都能够进行统一的分析。现在很多工程都在使用他:最著名的几个如Chrome,Firefox,Picasa和Google Earth。另外他的License是BSD的,也就是说,我们即便是在商业软件中使用,也是合法的http://code.google.com/p/google-breakpad/
http://bigasp.com/archives/450
调试Release发布版程序的Crash错误
http://www.cppblog.com/Walker/articles/146153.html
http://blog.sina.com.cn/s/blog_48f93b530100fsln.html
对于托管程序也有 Good crash reporting library in c#
http://stackoverflow.com/questions/49224/good-crash-reporting-library-in-c-sharp
顺便看到了这个比较有意思的内容,35个你也许不知道的Google开源项目 http://www.enet.com.cn/article/2009/1228/A20091228592251.shtml
由于我的应用 需要处理跨平台问题,因此使用了Google breakPad
顺便把整理的资料放在了skydriver上,
https://skydrive.live.com/#cid=56B433AD3D1871E3&id=56B433AD3D1871E3%21427
https://skydrive.live.com/view.aspx?cid=56B433AD3D1871E3&resid=56B433AD3D1871E3%21433
Oracle数据库压力测试工具SwingBench
http://www.dominicgiles.com/downloads.html
Hammerora is an open source load test tool for the Oracle, Microsoft SQL Server,
MySQL and PostgreSQL Databases and Web Applications
http://hammerora.sourceforge.net/
ammerora is an open source load test tool for the Oracle, Microsoft SQL Server,
MySQL and PostgreSQL Databases and Web Applications
http://blog.sina.com.cn/s/blog_4dd475390102e8wb.html
super-smack
http://softtest.chinaitlab.com/qtjs/802678.html
Jmeter
http://jmeter.apache.org/usermanual/build-db-test-plan.html
Orastress! for Oracle
http://www.linxcel.co.uk/software_orastress.html
http://www.jayphilips.com/2010/01/07/50-open-source-performance-testing-tools/
50+ Open Source Performance Testing Tools
http://www.opensourcetesting.org/
http://www.agiledata.org/essays/databaseTesting.html
http://www.eygle.com/index-special.htm
- 使用ORION测试HP StorageWorks MSA1000存储 December 25, 2007
在当前存储配置下,IO最大吞吐量可以达到138M/s,iops稳定状态达到2800左右,而Latency在Load Level 30左右的时候达到10ms。 - Linux单磁盘IO速度概要 July 14, 2007
昨天测试一个朋友的系统,Dell的新服务器,型号未知,5x300G Disk Raid5的配置,结果简单的测试下来,IO速度仅仅能达到8M/s左右。 - 使用orastress!进行数据库压力测试 October 18, 2004
Orastress!的作者是Geoff Ingram,也就是我们前面介绍的orabm的作者,他曾经为Oracle工作数年,是High Performance Oracle" (ISBN: 0471224367)一书的作者. - 使用orabm进行CPU压力测试... October 18, 2004
orabm是一个开源的系统CPU性能测试工具... - 使用Bonnie进行系统IO性能测试 October 18, 2004
Bonnie是一款极小的测试系统IO性能的工具,源代码公开.. - 使用Bonnie++进行系统IO性能测试 October 18, 2004
由于Bonnie存在一些众所周知的问题,比如>2G的文件支持. Russell Coker 开发了一套新的代码,用以支持>2G的文件等,得到Tim Bray (tbray@textuality.com)的许可之后,Russell把他的软件命名为bonnie++,在网上发布,并开始流行起来. - 如何安装和使用orabm October 18, 2004
简要介绍orabm的安装... - 如何实施Benchmark测试-你需要怎样的测试 October 18, 2004
我们以存储测试为例,你不仅需要为服务器、HBA、光纤交换机、RAID承担开销,而且还需要承担诸如文件系统、卷管理器等大量软件费用. - 如何实施Benchmark标准测试-问题的提出及Tpc-C标准 October 18, 2004
在大系统设计过程中,经验显示是不足够的,你必须拿出足够的证据来说明你的架构,你的系统必须在理论上能够满足用户的需求. 到这里我们已经看到,一个最重要的内容被引入了,那就是:用户需求.
搜索关键词
C++ 网络库 Network Library TCP Server
网络库总结
http://blog.csdn.net/langeldep/article/details/6976120
在开源的C/C++网络库中,常用的就那么几个,在业界知名度最高的,应该是ACE了,不过是个重量级的大家伙,轻量级的有libevent, libev,还有 Boost的ASIO。
ACEhttp://www.cs.wustl.edu/~schmidt/ACE.html
ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候,要根据情况,看你从那一层来进行使用。支持跨平台。
ASIOhttp://think-async.com/
Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。
libevent
libevent是一个C语言写的网络库,官方主要支持的是类linux 操作系统,最新的版本添加了对windows的IOCP的支持。由于IOCP是异步IO,与linux下的POLL模型,EPOLL模型,还有freebsd的KQUEUE等这些同步模型在用法上完全不一致,所以使用方法也不一样,就好比ACE中的Reactor和Proactor模式一样,使用起来需要转变思路。如果对性能没有特别的要求,那么使用libevent中的select模型来实现跨平台的操作, select模型可以横跨windows, linux, unix,solaris等系统。
libev
libev是一个C语言写的,只支持linux系统的库,我以前研究的时候只封装了EPOLL模型,不知道现在的新版有没有改进。使用方法类似libevent,但是非常简洁,代码量是最少的一个库,也就几千行代码。显然这样的代码跨平台肯定是无法支持的了,如果你只需要在linux下面运行,那用这个库也是可以的。
Muduohttp://code.google.com/p/muduo/
http://blog.csdn.net/solstice/article/category/779646
http://code.google.com/p/muduo/
POCOhttp://pocoproject.org/
http://blog.csdn.net/zhangxinrun/article/details/5914100
POCO的优点:
1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级。
2) 比 boost:asio更全面的网络库。但是boost:asio也是一个非常好的网络库。
3) 包含了一些Boost所不包含的功能,像XML,数据库接口等。
4) 跟Boost相比,集成度更高,是更加统一的一个库。
5) Poco的c++代码更清洁,现代和易理解。对不是模板编程专家的人来说,POCO的代码比大多数Boost库容易理解得多
6) 可以在许多平台上使用
POCO的缺点:
1) 文档有限。但这一定程度上是因为代码的容易理解。
2) 跟Boost相比用户社群小得多。
3) 有多少能集成进C++标准是个问题。而Boost在这方面不是个问题。
许多POCO的用户把POCO和Boost一起并用。
Boost是高质量的库,但它不是个框架。
Boost:asio处理高并发的效率还可以。单连接吞吐稍微弱点。 如果选用,最好封装好,别让boost代码吞噬你的代码,那样最后不可收拾。呵呵。
asio在windows下效率是最好的。基本接近自己在iocp上开发的效率。在linux下,他默认选用epoll, 但中间为了做了层stream cache, 效率稍有损失。而且他的epoll规则用的不太合理,可以自己修改他的代码,达到自己的需求。
在freebsd下,他默认是select的,要自己修改他的代码条件编译,才可以支持kqueue
http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html
比较
http://stackoverflow.com/questions/992069/ace-vs-boost-vs-poco
http://stackoverflow.com/questions/474840/boost-vs-ace-c-cross-platform-performance-comparison
Boost.Asio和ACE之间关于Socket编程的比较
http://blog.csdn.net/summerhust/article/details/6595321
信息交换协议
基于 Google protobuf 的 webgame 网络协议设计
http://www.slideshare.net/laiyonghao/google-protobuf-webgame
http://zzk.cnblogs.com/s?w=blog%3ASolstice%20protobuf%20
http://www.infoq.com/cn/news/2011/05/sl-data-exchange-protocol
参考资料
http://webservices.ctocio.com.cn/354/12203854.shtml
http://blog.csdn.net/yuyin86/article/details/6562611
http://www.kuqin.com/system-analysis/20080614/9506.html
http://www.oschina.net/project/tag/145/networklib?lang=0&os=0&sort=view
首先Java下根据JDBC规范连接数据库,有几种形式,参考
http://djdnmq.iteye.com/blog/356468 oracle 驱动oci thin 区别
Oracle客户端准备
10201_client_linux32.zip
安装完成后,需要确保在终端中可以正确的执行sqlplus命令
Oracle环境变量
如果Tomcat是服务,需要把Oracle的安装环境变量写到TOMCAT中,类似如下
Tomcat加入/home/**/apache-tomcat-6.0.35/bin/catalina.sh开头,当前的用户加入:.bash_profile的末尾,具体的内容如下:
export ORACLE_HOME=/home/ ** /oracle/product/10.2.0/client_1
export ORACLE_BASE=/home/ ** /oracle/product/10.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME:$ORACLE_HOME/lib:$ORACLE_HOME/jdbc/lib:${LD_LIBRARY_PATH}
建立到目标数据库的TNS连接
类似在/home/**/oracle/product/10.2.0/client_1/bin执行./netmgr
建立到目标数据库的TNS名字,此时就可以使用JDBC的OCI形式访问Oracle数据库了
Web容器访问Oracle出现如下错误的一些参考资料
no ocijdbc10 in java.library.path
https://forums.oracle.com/forums/thread.jspa?threadID=290097
https://forums.oracle.com/forums/thread.jspa?threadID=615281
- JDBC Thin Driver100% Java client-side JDBC driver for use in client applications, middle-tier servers and applets.
- JDBC OCI Driver
Client-side JDBC driver for use on a machine where OCI is installed.
- JDBC Thin Server-side Driver
JDBC driver for use in Java program in the database to access remote Oracle databases.
- JDBC Server-side Internal Driver Server-side JDBC driver for use by Java Stored procedures. This driver used to be called the "JDBC Kprb Driver".
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc101040-094982.html
https://forums.oracle.com/forums/thread.jspa?threadID=290097
Flex 3 与 Flex 4 之间的区别
http://www.adobe.com/cn/devnet/flex/articles/flex3and4_differences.html
Flex: 路在何方 – Flex 4.5之后的发展方向(Flex: where we are headed)
http://blogs.adobe.com/zheping/archives/5
Flex 开发人员中心
http://www.adobe.com/cn/devnet/flex.html
Flex 架构
http://www.adobe.com/cn/devnet/flex/architecture.html
Flex 与 Java
http://www.adobe.com/cn/devnet/flex/flex_java.html
Flex与Java之间的区别
http://www.adobe.com/cn/devnet/flex/articles/flex_java_differences.html
