[服务器]一场台风引起的“”内存小知识“”

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://david.blog.csdn.net/article/details/52571437

超过16级台风正面冲击厦门,一夜未眠。刚从建国以来最强台风中缓过来,投入小区环境卫生清理过程中,接到公司”命令”,服务器“挂了”。
一路心情忐忑不安,向群里的朋友请教问题,如何面对,心里默默祈祷硬盘千万别挂。虽然有做异地备份,但是最后一次备份时间呢?从来没有做过灾难演练,是否能正常目录还原呢?
断电自检通过之后,开启机器,显示器无任何信号?在自己无法处理硬盘主板异常的情况下,我也只能尝试检查下内存。为了防止静电对内存的损伤,还是小心翼翼的断电。一条条重新插拔。重新接上电源,启动机器。一切还是老样子。
此时我想到我们内存是后面加进去的,会不会是其中一根出现问题了?那我先把原装的4根装回去。我乱插:“对称法”,居然可以启动了。此时内心:我cao,居然真的是,TMD聪明。
那问题来了?哪一根出现问题呢?一根一根试?这也太慢了。我也不怎么会接内存呀。
这两个CPU,还不太对称一边12,一边8个。
解决办法:百度大法
本机型最多支持
20个DIMM内存条的安装,LV RDIMM最多支持16条,主板的CPU1支持12个DIMM,CPU2支持8个DIMM。DIMM上顺序标识有
DIMMA1\DIMMA2\ DIMMA3\DIMMB1\DIMMB2\DIMMB3等。
最大支持的内存容量是320GB(16GB*20),最小支持的内存容量2GB(2GB*1)
本服务器在单
CPU配置时,可以分别支持1、2、3、4、6、8、12条DIMM
内存;双CPU配置时,可以分别支持2条、4条、6条、8条、12条、16条、20条DIMM内存条的配置,安装不同数量的内存条时, 请根据主板标识的顺序,详细安装规则如下表所示:
注:X表示该插槽安装内存。所有内存的型号和容量必须一致。LV-DIMM不支持插入A3\B3\C3\D3。
这里写图片描述
这里写图片描述
这里写图片描述
知道 了接法就简单了,同时为了提高检测速度,4根一起测试。第三组的时候发现异常,采用对半法。终于把这条”小龟龟”给揪出来了。那就按照说明书接法,重新加进去吧。
接电,自检,启动,进入系统一切正常,显示内存144G。
补充:我有个习惯喜欢先插“蓝色”,原因我也不晓得。希望有专业人士指导下蓝色和黑色插入优先顺序。。。

展开阅读全文

释放内存引起的问题

12-22

//别人问我,我问别人。rn//谁能给分析下 那里出问题了.rn#include rn#include rnrnrnstruct CStrDatarnrn int nDataLength; rn int nAllocLength; rn char* data()rn return (char*)(this+1); rn;rnrnclass CStrrnrnpublic:rn CStr();rn CStr( char * str);rn CStr( CStr & obj );rn ~CStr();rnprivate:rn void AllocBuffer( int nlen ) ;rn void Init();rn CStrData* GetCStrData() const;rn void ReleaseBuffer();rn int GetReferenceCount();rn int GetDataLength() const;rnrnpublic:rnrn operator char * () const return ( char * ) m_pchData ; rn CStr& operator = ( const CStr& stringSrc );rn char & operator []( const int & index );rn int GetLen() const;rn int GetAllocLength() const;rn char * GetBuffer();rnprotected:rn char * m_pchData;rnrn;rnrnbool operator == ( CStr & CStrObj1, CStr & CStrObj2 );rnusing namespace std;rnrnCStr::CStr()rnrn Init();rnrnrnCStr::CStr( char * str )rnrn int len = strlen( str ) + 1 ;rn Init();rn AllocBuffer( len );rn strcpy( GetBuffer(), (char *)str);rnrnrnCStr::CStr( CStr & obj )rnrn char * ObjBuffer = obj.GetBuffer();rn Init();rn AllocBuffer( obj.GetLen()+1 );rn strcpy( GetBuffer(),(char *)ObjBuffer);rn *GetCStrData() = *obj.GetCStrData();rnrnrnCStr::~CStr()rnrn ReleaseBuffer();rnrnrnvoid CStr::ReleaseBuffer()rnrn int i = 0;rn if( m_pchData )rn rn m_pchData = ( char * )GetCStrData();rn delete[] m_pchData;rn rn m_pchData = NULL;rnrnrnchar * CStr::GetBuffer()rnrn return m_pchData;rnrnrnvoid CStr::Init()rnrn m_pchData = NULL;rn //ReleaseBuffer();rn rnrnrnvoid CStr::AllocBuffer( int nLen )rnrn if( nLen == 0 )rn Init();rn else rn rn CStrData* pData;rn if( nLen <= 64 )rn rn pData = ( CStrData* )rn new char[ sizeof(CStrData) + ( 64 )*sizeof( char )];rn pData->nAllocLength = 64;rn rn else if( nLen <= 128 )rn rn pData = ( CStrData* )new rn char[ sizeof(CStrData) + ( 128 )*sizeof( char )];rn pData->nAllocLength = 128;rn rn else if( nLen <= 256 )rn rn pData = ( CStrData* )new rn char[ sizeof(CStrData) + ( 256 )*sizeof( char )];rn pData->nAllocLength = 256;rn rn else if( nLen <= 512 )rn rn pData = ( CStrData* )new rn char[ sizeof(CStrData) + ( 512 )*sizeof( char )];rn pData->nAllocLength = 512;rn rn elsern rn pData = ( CStrData* )new rn char[ sizeof(CStrData) + ( nLen )*sizeof( char )];rn pData->nAllocLength = nLen;rn rn pData->data()[nLen] = '\0';rn pData->nDataLength = nLen;rn m_pchData = pData->data();rn rnrnrnCStrData* CStr::GetCStrData() constrnrn return ( CStrData* ) m_pchData - 1 ;rnrnrnint CStr::GetReferenceCount()rnrn return ( ( CStrData* ) m_pchData - 1 )->nDataLength;rnrnrnint CStr::GetDataLength() constrnrn return( ( CStrData* ) m_pchData - 1 )->nDataLength;rnrnrnint CStr::GetAllocLength() constrnrn return m_pchData ? ( ( CStrData* ) m_pchData - 1 )->nAllocLength : 0;rnrnrnint CStr::GetLen() constrnrn return GetDataLength()- 1;rnrnrnchar & CStr::operator [] ( const int & index )rnrn return m_pchData[ index ];rnrnrnbool operator == ( CStr & CStrObj1, CStr & CStrObj2 )rnrn if( CStrObj1.GetLen() == CStrObj2.GetLen() )rn rn if ( !strcmp( CStrObj1.GetBuffer(), CStrObj2.GetBuffer() ) )rn return true;rn elsern return false;rn rn elsern return false;rnrnrnCStr& CStr::operator=( const CStr& stringSrc )rnrn if( GetAllocLength() != stringSrc.GetAllocLength() )rn rn ReleaseBuffer();rn //???????????????????????????rn //改写成AllocBuffer( stringSrc.GetAllocLength() ); rn //或者是64的倍数就报错?????AllocBuffer( 64*n );rn ////???????????????????????????rn AllocBuffer( 64 ); rn *GetCStrData() = *stringSrc.GetCStrData(); rn rn strcpy( GetBuffer(), stringSrc.m_pchData );rn return *this;rnrnrnvoid main()rnrn CStr str1(" word");rn CStr str3;rn str3 = "hello ";rnrnrnrn 论坛

没有更多推荐了,返回首页