文档选项 |
|
U别Q?初
?鹏飞 (suipf@cn.ibm.com), 软g工程? IBM
?亦方 (wuyifang@cn.ibm.com), 软g工程? IBM
2009 q?3 ?11 ?/p>
本文向读者介l利?Java dump 诊断 JVM Crash ?CPU 饥饿{问题的Ҏ和技巧,以便使用h加全面的了解 Java dump 在故障诊断过E中的作用?/blockquote>
更多关于 Java dump q行 JVM 故障诊断的内容,请参考:
本文对上面的文章做了q一步的补充Q介l了如何利用 Java dump 诊断 JVM Crash ?CPU 饥饿{问题的Ҏ和技巧?/p>
对于大型 java 应用E序来说Q再_的测试都难以堵住所有的漏洞Q即便我们在试阶段q行了大量卓有成效的工作Q很多问题还是会在生产环境下暴露出来Qƈ且很隑֜试环境中进行重现。JVM 能够记录下问题发生时pȝ的运行状态ƈ其存储在{?dump)文g中,从而ؓ我们分析和诊断问题提供了重要的依据。常见的转储文g包括 Java DumpQ?Heap dump ?System dump。这里我们主要介l?Java dump ?JVM 故障诊断中的应用?/p>
Java dumpQ也叫做 Thread dumpQ是 JVM 故障诊断中最重要的{储文件之一。JVM 的许多问题都可以使用q个文gq行诊断Q其中比较典型的包括U程dQCPU 使用率过高,JVM CrashQ堆内存不Q和c装载等问题。作Zƾ轻量Q与 Heap dump ?System dump 相比Q的转储文gQJava dump 的确是我们诊?JVM 问题的首选。本文将pȝ的介l?Java dump q行 JVM 故障诊断的方法和技巧,希望能够为大家提供一些帮助?/p>
回页?/strong>
Java dump 通常是文本格?.txt)Q因此可以通过一般的文本~辑器进行阅读,阅读旉要注意段与行的格式:
Z便于大家的分析,Java dump 的每一D늚开_都会?#8220;-----”与上一D|昄区分开来。而每一D늚标题也会?#8220;=====”作ؓ标识Q这h们就能够很容易的扑ֈ每一D늚开头和标题部分Q如清单 1Q?/p>
清单 1. Java dump D|题示?/strong>
NULL -------------------------------- 0SECTION TITLE subcomponent dump routine NULL ===============================
Java dump 文g中,每一行都包含一个标{,q个标签最多由 15 个字W组成(如清?中所C)。其中第一位数字代表信息的详细U别Q?Q?Q?Q?Q?Q,U别高代表信息详l;接下来的两个字符是段标题的羃写,比如Q?#8220;CI” 代表 “Command-line interpreter”Q?#8220;CL” 代表 “Class loader”Q?#8220;LK” 代表 “Locking”Q?#8220;ST” 代表 “Storage”Q?#8220;TI” 代表 “Title”Q?#8220;XE” 代表 “Execution engine”{等Q其余部分ؓ信息的概q?/p>
清单 2. Java dump 行标{֒内容CZ
1TISIGINFO Dump Event "uncaught" (00008000) Detail "java/lang/OutOfMemoryError" received
不同版本?JVM 所产生?Java dump 的格式可能会E有不同Q但基本上都会包含以下几个方面的内容Q?/p>
- TITLE 信息块:描述 JAVA DUMP 产生的原因,旉以及文g的\径?
- GPINFO信息块:GPF 信息?
- ENVINFO 信息块:pȝq行时的环境?JVM 启动参数?
- MEMINFO 信息块:内存的用情况和垃圾回收记录?
- LOCKS 信息块:用户监视?Monitor)和系l监视器(Monitor)?
- THREADS信息块:所?java U程的状态信息和执行堆栈?
- CLASSES信息块:cd载信息?
回页?/strong>
׃ Java dump 文g包含的内Ҏ较广泛,因此 JVM 的很多问题都可以通过 java dumpq行诊断。这些问题主要包括线E阻塞,CPU 使用率过高,JVM CrashQ堆内存不Q和c装载等问题?/p>
U程d是我们在 java 多线E编E中l常遇到的问题。由于对后端有限资源的争用以及过度同步等问题Q经怼发现 Java dump 中某个资源(锁对象)下有太多的线E处于等待状态,q时候我们通常需要从以下三个斚w去诊断这个问题:
- q个锁存在的目的是什么?有没有可能去掉这个锁或者羃这个锁保护的范_从而减线E等待问题发生的几率?
- 有哪些线E需要用到这个锁Q有没有可能改用其它更好的替代方案?
- 当前哪个U程正在持有q个锁,持有的时间是多长Q有没有可能~短持有的时间?
比线E阻塞更严重的是死锁问题Q当两个以上的线E互相等待对方的锁,从而Ş成一个环的时候,׃发生死锁。关于如何?Java dump 诊断死锁的问题,请参??WebSphere Application Server V6.1 应用E序中跟t死?/a> 一文,该文Ҏ问题做了较ؓ详细的介l?/p>
JVM Crash 是我们所到的最手的问题之一Q它Ҏ个系l的影响是致命的Qƈ且L让h防不胜防。导?JVM 崩溃的原因有很多Q通常都是一些底层的错误。比?JVM 本n?bugQ错误的 JNI 调用Q第三方原生模块Q比如数据库驱动E序Q中?bug {。JVM崩溃的原因复杂,q且大多都难以重玎ͼ所以诊断v来有一定的隑ֺ?/p>
一般来_JVM 崩溃的时候,pȝ一般会自动产生一?Java dump 文gQJVM 默认的设|参数就会触发)。这?Java dump 会帮我们记录?JVM 崩溃的原因,相关的信息会记录?TITLE 信息块,GPINFO 信息块和 THREADS 信息块中?/p>
- TITLE 信息块:用于认问题产生的原因,x否是׃一些底层错误而导?JVM Crash?
- GPINFO 信息块:用于查看问题的详l信息和问题定位?
- THREADS信息块:用于了解问题U程的运行情c?
下面我们通过一个具体的例子来介l?JVM Crash 问题的诊断方法。TestJni 是一个简单的 Java 应用Q它通过 JNI 调用本地代码 CallJin.dll 中的 doSomeThing() 函数?/p>
清单 3. ?TestJni cM调用 CallJin.dll 中的函数
package test; public class TestJin { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestJin testObj = new TestJin(); testObj.work(); } public void work() { CallJni.doSomeThing(); } } package test; public class CallJni { static { System.loadLibrary("CallJni"); System.out.println("Dll Loaded"); } public native static void doSomeThing(); }
CallJin.dll ?C++ ~写得本地库Q其源代码如清单 3 所C:
清单 4. CallJni.dll ?C++ 实现代码
#include <com_test_CallJni.h> /* * Class: com_test_CallJni * Method: doSomeThing */ JNIEXPORT void JNICALL Java_test_CallJni_doSomeThing (JNIEnv *, jclass){ int *i; *i = 100; }
在这D?C++ 代码中,整Ş指针 I q没有分配空间就被赋了|q是一个非怸重的错误。当?java 应用E序员ƈ不知道这一点,q且?java 应用E序中调用了 doSomeThingQ) q个 JNI 函数。结果导?JVM 发生了崩溃?/p>
在这D?C++ 代码中,整Ş指针 I q没有分配空间就被赋了|q是一个非怸重的错误。当?java 应用E序员ƈ不知道这一点,q且?java 应用E序中调用了 doSomeThingQ) q个 JNI 函数。结果导?JVM 发生了崩溃?/p>
下面?JVM 崩溃Ӟpȝ为我们生成的 Java dump 文g的片断?/p>
清单5. Java dump 文g片断
NULL ---------------------------------------------- 0SECTION TITLE subcomponent dump routine NULL =============================== 1TISIGINFO Dump Event "gpf" (00002000) received 1TIDATETIME Date: 2008/11/12 at 20:45:24 1TIFILENAME Javacore filename: C:\eclipse\workspace\Serviceability\TestApps\SampleLeak\TestJin\ javacore.20081112.204522.5656.txt
?TITLE 信息块中我们可以看到Q这?java 是由一?"gpf" 事g触发的,GPF ?General Protection Fault 的羃写,表明应用E序发生了一般性保护错误,q种错误常常D JVM H然崩溃?/p>
除了 "gpf" 之外QJava dump q可能由如下事g触发Q清?6Q?/p>
清单 6. 常见 Java dump 触发事g
user SIGQUIT signal (Ctrl-Brk on Windows, Ctrl-\ on Linux, Ctrl-V on z/OS) abort a controlled crash, as triggered by the abort() system call vmstart the VM has finished initialization vmstop the VM is about to shutdown load a new class has been loaded unload a classloader has been unloaded throw a Java exception has been thrown catch a Java exception has been caught uncaught a Java exception was not handled by the application thrstart a new thread has started thrstop an old thread has stopped blocked a thread is blocked entering a monitor fullgc garbage collection has started
?TITLE 信息块,我们只能初步了解问题产生的原因,如果要进一步了解问题的详细信息Q还要查?GPINFO 信息块(清单 7Q:
清单7. GPINFO 信息?/strong>
NULL ---------------------------------------------- 0SECTION GPINFO subcomponent dump routine NULL ================================ 2XHOSLEVEL OS Level : Windows XP 5.1 build 2600 Service Pack 3 2XHCPUS Processors - 3XHCPUARCH Architecture : x86 3XHNUMCPUS How Many : 2 NULL 1XHEXCPCODE J9Generic_Signal_Number: 00000004 1XHEXCPCODE ExceptionCode: C0000005 1XHEXCPCODE ExceptionAddress: 412E136E 1XHEXCPCODE ContextFlags: 0001003F 1XHEXCPCODE Handler1: 7EFB04E0 1XHEXCPCODE Handler2: 7F057A80 1XHEXCPCODE InaccessibleAddress: CCCCCCCC NULL 1XHEXCPMODULE Module: C:\eclipse\workspace\Serviceability\TestApps\SampleLeak\TestJin\CallJni.dll 1XHEXCPMODULE Module_base_address: 412D0000 1XHEXCPMODULE Offset_in_DLL: 0001136E NULL 1XHFLAGS VM flags:00040000 NULL
GPINFO 信息块中我们可以扑ֈ问题的异总码,
ExceptionCode: C0000005
代表内存讉K错误或者非法的内存操作?code>Module: C:\eclipse\workspace\Serviceability\TestApps\TestJin\CallJni.dll 指明了发生问题的原生模块?CallJni.dll q个动态连接库是我们自q JNI 代码Q因此很Ҏ发现问题的所在。在一个复杂的 java q行环境下,很多时候异常是在第三方的代码库中生的Q我们没有办法查看源代码中的问题Q这时候只能通过文g名中的一些关键字来推问题发生的位置Q这些关键字包括Q清?8Q:
清单 8. 需要注意的关键?/strong>
GC = garbage collection/collector (how Java frees memory) JIT = just-in-time compiler, a feature of JVM JDBC = Java feature for database access ORB = object request broker, lower layer of app server JMS = java messaging service, feature of web server or add-on
例如QModule: C:\JDK\IBM\java1.5.0\jre\bin\j9jit23.dll
说明 JIT 模块发生问题Q用户可以?JITC_COMPILEOPT 变量?SKIP 选项用对当前方法进?JIT ~译Q然后再对系l的q行情况q行q一步的跟踪?/p>
JITC_COMPILEOPT=SKIP{failingPackage/failingClass}{failingMethod}
除此之外Q查?THREADS 信息块中当前U程的执行堆栈也有助于我们对问题的诊断。从清单 9 我们可以看到 main U程在执?CallJni.doSomeThing Ҏ数的q程中发生了问题Q据此我们可以返回源代码中查扄应的ҎQ进而确定问题的Ҏ?/p>
清单 9. Threads 信息?/strong>
NULL ---------------------------------------------------- 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMCURTHDINFO Current Thread Details NULL ---------------------- 3XMTHREADINFO "main" (TID:0x408C7C00, sys_thread_t:0x00366278, state:R, native ID:0x000016CC) prio=5 4XESTACKTRACE at test/CallJni.doSomeThing(Native Method) 4XESTACKTRACE at test/TestJin.work(TestJin.java:16) 4XESTACKTRACE at test/TestJin.main(TestJin.java:11) NULL
CPU 使用率过高可能是׃某些U程陷入了死循环或者执行了不适当的操作引LQ其诊断Ҏ是这些线E找出来Q修正问题或者进行代码优化。由?Java Dump 中ƈ没有包含各线E的资源使用情况Q因此我们需要结合其他的操作pȝ命o/工具Qprstat、top、pslist {等Q,?CPU 使用率较高的U程映射?Java Dump 中,q分析这些线E的状态以及可能发生的问题?/p>
从下面这D?PSList 的输出结果中我们可以看到 jvm 内部每个U程消耗的ȝ“用户旉”?#8220;内核旉”Q比较几?PSList 的输出结果,我们p从中扑և那些 CPU 使用旉显著增加的线E,再将q些U程?TID 映射到Java Dump中,q而查看问题线E的详细信息?/p>
清单 10. PSList 的输出结?/strong>
pslist -d <Java PID> Tid Pri Cswtch State User Time Kernel Time Elapsed Time 2908 8 2025 Wait:Executive 0:00:00.359 0:00:01.312 1:48:08.046 4344 15 157 Wait:UserReq 0:00:00.218 0:00:00.015 1:48:07.921 4836 15 415456 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.921 2496 8 1 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.796 4648 9 1 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.796 3116 9 7 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.796 5268 8 189 Wait:UserReq 0:00:00.015 0:00:00.000 1:48:07.796 5220 7 6991523 Running 1:47:42.031 0:00:01.218 1:48:05.593 3932 9 2 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:05.125
与线E死锁问题不同,在分?CPU 利用率过高的问题Ӟ我们不需要关心那些处于等待状态的U程Q因为线E处于等待状态不需要消?CPU 资源。我们关注的重点应该?THREADS 信息块中那些正在q行Qstate:R 状态)的线E。很多时候ؓ了分析线E状态的一些变化,我们需要对比多?Java Dump 文gQ看哪些U程状态发生了变化Q哪些一直在执行相同的函敎ͼ从而找出那些可疑的问题U程?/p>
除了 Thread 相关的信息外QJava Dump q包?Memory ?GC {方面的信息Q虽然这些信息不?Heap Dump ?VerboseGC 那么详细Q但对于一些比较简单的问题定位q是很有帮助的。例如,下面?Java dump 清单中,
Dump Event "uncaught" (00008000) Detail "java/lang/OutOfMemoryError" received
告诉我们问题是由于内存溢出引LQƈ且从 MEMINFO 信息块中可以扑ֈ当前堆中的空间用情况, 1ffa0 的剩余空间说明系l的可用堆内存已l严重不了Q需要我们扩大堆内存的大或者修改应用程序其占用更的内存?/p>
清单 11. MEMINFO 信息?/strong>
NULL ---------------------------------------------------- 0SECTION TITLE subcomponent dump routine NULL =============================== 1TISIGINFO Dump Event "uncaught" (00008000) Detail "java/lang/OutOfMemoryError" received 1TIDATETIME Date: 2008/04/20 at 19:13:50 1TIFILENAME Javacore filename: c:\Serviceability\AppServer\profiles\AppSrv01\javacore.20080420.185326.948.txt NULL ---------------------------------------------------- 0SECTION MEMINFO subcomponent dump routine NULL ================================= 1STHEAPFREE Bytes of Heap Space Free: 1ffa0 1STHEAPALLOC Bytes of Heap Space Allocated: 40000000
常见的类加蝲问题包括Q?ClassNotFoundExceptionQJar 包冲H以及由c装入引发的其他问题Q例?jdk 1.4 中的内存片问题Q?Java Dump 文g?Classes 信息块的格式如清单中C,q些信息可以帮我们确定以下问题:
- 当前pȝ中有哪些 Class 文g被加载进来?
- 认某个 Class 是否被正的 ClassLoader 所加蝲Q即不同?ClassLoader 之间是否?Jar 包冲H?
- 已经加蝲?Class 的个数。在IBM Jre1.4中,我们可以参考系l中 Class 的个数来讄 KCluster 的大?
清单 12. CLASSES 信息?/strong>
NULL --------------------------------------------------------- 0SECTION CLASSES subcomponent dump routine NULL ================================= 1CLTEXTCLLOS Classloader summaries 1CLTEXTCLLSS 12345678: 1=primordial,2=extension,3=shareable,4=middleware,5=system, 6=trusted,7=application,8=delegating 2CLTEXTCLLOADER p---st-- Loader *System*(0x008DA0B0) 3CLNMBRLOADEDLIB Number of loaded libraries 3 3CLNMBRLOADEDCL Number of loaded classes 347 2CLTEXTCLLOADER -x--st-- Loader sun/misc/Launcher$ExtClassLoader(0x008E5E38), Parent *none*(0x00000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 2CLTEXTCLLOADER -----ta- Loader sun/misc/Launcher$AppClassLoader(0x008EF3E0), Parentsun/misc/Launcher$ExtClassLoader(0x008E5E38) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 2 1CLTEXTCLLIB ClassLoader loaded libraries 2CLTEXTCLLIB Loader *System*(0x008DA0B0) 3CLTEXTLIB C:\JDK\IBM\java1.5.0\jre\bin\java 3CLTEXTLIB C:\JDK\IBM\java1.5.0\jre\bin\jclscar_23 3CLTEXTLIB C:\JDK\IBM\java1.5.0\jre\bin\zip 1CLTEXTCLLOD ClassLoader loaded classes 2CLTEXTCLLOAD Loader *System*(0x008DA0B0) 3CLTEXTCLASS java/io/ByteArrayOutputStream(0x40D40098) 3CLTEXTCLASS sun/nio/ByteBuffered(0x40D40330) 3CLTEXTCLASS java/lang/ref/PhantomReference(0x40DB9360) 3CLTEXTCLASS sun/misc/Cleaner(0x40DB94A8)
回页?/strong>
关于 Java dumpQ下面是一些有可能让你产生困惑的问题:
Z么发?JVM Crash ӞJVM 没有自动生成 Java dump 文gQ?/em>
{:q种情况大多与系l的环境变量或?JVM 启动参数的设|有养I比如讄?
DISABLE_JAVADUMP=trueQIBM_NOSIGHANDLER=true
{等Q因此可以首先检查系l设|和 JVM 启动参数。当然也不排除因Z些不定因素D JVM 无法产生 Java dumpQ虽然这U可能性比较小?JVM 在生?Java dump 的同时也生成?Heap dumpQ它们之间有没有什么联p?
{:有,但是关系不大。因?java dump 主要反映的是U程的运行状态,?Heap dump 则主要反映对象之间的引用关系Q所以两者之间没有太大的联系。有时候我们可以通过锁对象或?Class 对象的v始地址扑ֈ它在 Heap dump 中的位置Q但大多数时候这Ҏ障诊断ƈ没有多大意义?/p>
Z么有?java dump 的锁没有 owner?
{:q不是所有的锁都被其它线E持有,有些锁是用作d{待的,比如 sleep() Qwait()Qjoin() {,q些锁ƈ没有被其它线E占用,被它d的线E只是在{待通知Q即 “Waiting to be notified”。从U程状态上看,q些锁一般都处于 “CW” 状态?/p>
Java Dump 中的很多U程处于 state:CW ?state:B 状态,它们之间有何区别Q?/em>
{:两者都处于{待状态。不同是Q?/p>
CW - Condition Wait – 条g{待. q种{待一般是U程d{待或者正在进行某U?IO 操作Q而ƈ非等待其它线E释放资源。比?sleep() Qwait()Qjoin() {方法的调用?/p>
B – Blocked – U程被阻塞,与条件等待不同,U程被阻塞一般不是线E主动进行的Q而是׃当前U程需要的资源正在被其他线E占用,因此不得不等待资源释放以后才能l执行,例如 synchronized 代码块?/p>
Z么我?PsList 里看到的U程无法映射?Java dump 中?
{:׃很多操作pȝ工具和命令输出的U程?TID 都是十进制的Q映到 Java dump 旉先要其转换为十六进制数字,然后再到 Java dump 中查扑֯应的 native ID。Java dump 中每个线E都有两个ID, 一个是 java U程的TID, 另一个是对应操作pȝU程?native ID?/p>
阅读 Websphere Appliaction Server 产生?Java dump 文g有没有什么特别的技巧?
{:对于 WAS 应用E序来说Q线E信息往往要比一般的应用E序复杂的多。记住一些常见的 ThreadName 可以帮助我们更好的理解应用程序的q行状态,例如Q?/p>
U程? U程信息 Web Container: # WAS web container * Alarm Thread # handles timer processing Session.Transports.Threads:### servlet threads for processing HTTP requests ORB.thread.pool:### ORB thread (ORB data) P=437206:O=0:
StandardRT=19027:LocalPort=9001:RemoteHost=hostname.ibm.com:RemotePan ORB thread for receiving an EJB request or other ORB request Thread-## JVM thread (default name)
回页?/strong>
本文比较全面的介l了 Java dump ?JVM 故障诊断q程中的作用。正像你所看到的,Java dump 文g主要帮我们解决与U程相关的各U问题,但同时它qؓ我们提供了很多其它有用的信息Q比?JVM CrashQ,在某些情况下Q这些信息对于我们至关重要,所以充分的利用 Java dump 文g可以帮我们更快的扑ֈ解决问题的方向?/p>
学习
- ?WebSphere Application Server V6.1 应用E序中跟t死?/a>Q介l了利用Java Dump跟踪死锁问题的步骤和Ҏ?
- c装入问题解密,W?1 部分: c装入和调试工具介绍Q讨论类装入问题的系列文章之一?
- IBM JDK1.5 Information CenterQ帮您了?IBM JVM 的工作机制、诊断技术、诊断工L?
- WebSphere Application Server V7 专题Qؓ您ȝ了与 WAS V7 相关最新的内容和资源,其中包括入门介绍及开发技巧、配|与理、迁UR监控与试{?
- WebSphere 产品家族新特性系?Q本专题向您提供了目?WebSphere pd中新产品的新增功能的介绍?
- WebSphere Application Server 常见问题及解{?/a>Q向您提供了关于 IBM WebSphere Application Server 产品家族的问题集锦?
- WebSphere Application Server 产品专题Q在q里您可以获得关?WebSphere Application Server 最新的文章、教E等技术资源?
获得产品和技?/strong>
]]>
特别NQ创业的路上遍布着挫折
“回想我的创业之\Q我当年很幸q?#8221;作ؓ杭州大学生创业联盟特别顾问,丁磊很庆q在q轻的时候可以做自己喜欢的事情?#8220;创业是一个很热门的词。但是,我要提醒大家一件事Q创业的路上遍布着挫折?#8221;
对于自己抛出的八字箴aQ丁ؓ创业者作了详l的解释?#8220;首先Q你必须要自信。如果对自己做的事情都没有信心,那么你将很难获得成功。有自信你不一定能获得成功Q但没有自信你一定不会成功。其ơ,你必要学会坚持。我已经说过Q创业的路上会有很多挫折Q每一个成功的人都要经历挫折的考验。这个过E中需要坚持。另外,你还需要认真。也是_你要学会t踏实实做事情。最后,你还要学会包宏V认真是对自q要求Q包容则是对别h的。包容就是要我们能够宽恕别h的错误?#8221;
丁磊在最后强调了一点:“大学生创业要无时无刻保持一颗谦虚求知的心?#8221;
创业导师Q时间是属于q轻人的
创业导师代表田宁表示Q时间是属于q轻人的?#8220;60后可以分到房子,70后可以分到工作,那么我们q些80后和90后呢Q我们要靠自q双手创造一切。很多IT业的巨头Q你可以L他们的发家史Q很多都是大学生?#8221;
田宁Uͼq一代h是幸的?#8220;我们失去很多的同Ӟ也获得了很多。当60后和70后小时候只能玩泥土的时候,我们时候就可以玩电脑了?#8221;
“对于大学生创业,他们需要得到前辈们的指对{?#8221;田宁表示Q创业导师应该把自己痛苦的创业经历告诉他们?/p>
轮g席:创业体需?#8220;转型升”
“16q前Q我来到杭州开始创业。那时候的情况跟今天比较,真是今非昔比?#8221;杭州大学生创业联盟轮g席林东表C,那时候的创业L体q不是大学生?#8220;然而,他们依然撑v了现在的l济发展?#8221;
林东Uͼ现在需要的不仅是技术的转型升Q还需要创业群体的转型升?#8220;在十q以后,现在一些黑心商人的形象很看CQ更多的?a >李开?/a>q样的商人?#8221;
“创业充满了风险?#8221;林东表示Q创业导师的成长M开C会的支持,大家有义务和责Q帮助“朋友们”创业?#8220;有我们大家一L努力Q我怿一定会取得更大的辉煌?#8221;
杭州市长Q大学生创业应永不言?/strong>
“大学生创业应该永不言败!”杭州市长蔡奇表示Q创业带动就业,应该形成杭州的一面旗帜?#8220;杭州应该坚持人才强市战略Q抓住大学生创业为杭州积蓄力量,为天堂硅L蓄箋力量。千万不要小看大学生今天创业的弱和落魄Q通过他们能看到杭州的明天?#8221;
记者了解到Q杭州大学生创业联盟是根据杭州市委市政府提出“以创业带动就?#8221;的工作部|Ԍ成立服务大学生创业工作社团组l。创新工事长兼CEO李开复?a >阉K巴巴集团董事局d兼CEO马云、网易CEO丁磊、赛伯乐(中国)投资董事长朱敏加盟杭州大学生创业联盟ZQ特别N?/p>
蔡奇Uͼ杭州大学生创业联盟有三个特点?#8220;首先Q它是创业大学生集聚的组l。所有愿意创业的大学生,都可以从那里得到帮助。其ơ,它是整合资源的创业中心。特别值得一提的Q是创业投资基金也加入了q个l织里。最后,大学生创业联盟是个非政府机构。只靠政府是不够的,我们需要更多非政府l织参与Q来做政府做不到的事情?#8221;
如何更改Web.Config里默认的~码讄及其对于单个aspx面的编码格式的讄
把全球化讄Ҏq样会省下很多事Q?/p>
<globalization fileEncoding="GB2312" requestEncoding="GB2312" responseEncoding="GB2312"/>
q样一来,使用Request.QueryString[""]的时候就不用手动索编码ƈ解码了!省事啊!
在Web.Config中设|单个aspx面的编码格?
<location path="Member/MyShortMessage.aspx">
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
</system.web>
</location>
本内Ҏ自于老邢q?q来的电子商务从业经验、派代网的运营体会及与众多电子商务相关h士交综合整理而得。其中,q?q重Ҏ了B2C、C2C和B2BQ同Ӟq有C的徏设、运营和UI/UE{?/p>
本内容纯_Ҏ个h观点Q必然有偏颇之处Q看官仁者见仁,q望多多指正?/p>
W一部分 B2C的本?/strong>