http://www.sqlite.org/speed.html

자세한건 링크 고고싱

'develop > DB' 카테고리의 다른 글

MariaDB 오류 (Index for table '.\mysql\db.MYI' is corrupt; try to repair it)  (0) 2024.05.17
Mysql, GMT +0 기준 시간  (0) 2019.03.05
cassandra db 정리  (0) 2013.05.09

* spin_lock_irqsave()와 spin_lock_irq()
둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만,
spin_lock_irqsave()는 CPU의 flag 레지스터를 보관했다가
spin_unlock_irqrestore()로 복구할 수 있다.

* spin_lock()과 spin_lock_irq()의 차이는
spin_lock()은 interrupt를 disable하지 않기 때문에
interrupt handler(top half)에서는 사용할 수 없다.
대신 이때는 spin_lock_irq()나 spin_lock_irqsave()를 사용해야 한다.

* spin_lock_bh()
같은 종류의 softirq는 여려 CPU에서 동시에 실행될 수 있기 때문에
([ksoftirqd/CPUn] 커널 쓰레드가 softirq의 실행을 담당한다.)
softirq를 disable한 이후에 spin lock을 획득한다.
원래 이 함수의 이름은 spin_lock_softirq() 정도가 되어야 맞겠지만
예전 커널의 흔적이 아직 남아있다.

* 그리고, spin_lock()은
spin lock으로 보호해야 할 데이터가
interrupt handler(top half)에서도, softirq handler에서도 접근하지 않고
단지 그 외의 일반적인 커널 코드에서만 접근한다면
interrupt disable, softirq disable 같은 overhead 없이 spin lock을 얻을때 사용한다.



http://kldp.org/node/54671 답글에서 발췌

처음 테스트 할 때에는 분명 windows건 linux건 mysql서버가 다운되면 mysql_ping과 insert query가 약 15초 정도 멈춘 후 프로세스가 다시 정상적으로 진행됐었는데...
오늘 linux에서 타이머를 테스트 하려고 하니 15분간 멈춰 있었다...;;

덕분에 하루종일 인터넷을 검색했다.

키워드로 검색되는 거의 모든 페이지를 본 듯하다.. 하지만 해결을 하지 못했다.


windows에서는 간단히 

mysql_option(..., MYSQL_OPT_READ_TIMEOUT, ...);
mysql_option(..., MYSQL_OPT_WRITE_TIMEOUT, ...);

두개만 설정하면 된다.


하지만 linux에서는 저 방법도 안되고.. 꼼수로 CONNECT_TIMEOUT을 설정한 후 쿼리 전에 항상 재접속을 하는 방법을 해봤는데.. 뭐.. 역시나 안된다..(아마 insert query를 하면서 멈추지 않았을까 생각된다... 아니면 조건을 잘 못 했다거나 ;;)
된다고 해도 이 방법을 쓰면 안되겠지만;;


결국 mysql 소스를 이리저리 까뒤집어서 socket에 option을 설정하는 것으로 해결했다.

소켓이 생성되는 시기는 connect류의 함수가 호출되는 시기이므로 connect함수가 호출 된 후 설정하였다.

struct timeval tv;
tv.tv_sec = 1;
setsockopt(obj->net.fd, SOL_SOCKET, SO_SNDTIMEO,(struct timeval *)&tv,sizeof(struct timeval));
setsockopt(obj->net.fd, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&tv,sizeof(struct timeval));


대충 10여회 테스트 한 결과 아무리 오래 걸려도 1분은 걸리지 않았는데.. 이번엔 처음보는 에러가 나온다. 에러번호는  2013인데 에러 내용이 달라졌다..

2013, Lost connection to MySQL server at 'reading initial communication packet', system error: 111

음 -_-;;

일단 예상은... timeout 시간을 설정함으로써 DB와 연결이 되지 않으니 접속 권한이 없는것으로 판단되어 나타나는 에러 같은데...


약 10여회 테스트 결과는 정상 동작했다.

'develop > linux' 카테고리의 다른 글

sqlite 동시 접근시 에러??  (0) 2012.08.11
spin_lock, spin_lock_irq, spin_lock_bh  (0) 2012.06.28
ssh 접속시 증명서 변경됐다고 나올 때  (0) 2012.05.31
ubuntu 기본 설정  (0) 2012.05.30
segment fault 지점 찾기  (0) 2012.04.06

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

ssh  root@[IP]

이렇게 쳤을뿐인데... 




이런 무시무시한놈이 나와서 놀라게 할때가 있다.

저도 그래서 개깜놀해서 네이년에 잽싸게 검색해봤더니.

금방 답을 찾았네요.

제가 접속한 상태에서 그쪽 리눅스를 다시 깔았었거든요.

그래서 이전에 접속한 RSA 키 값으로 자꾸 접속하려니까 맞지 않았던거에요.

결론은 지우면 된다는거.



ssh-keygen -R [ IP or DomainName]

ex) ssh-keygen -R 123.123.123.123
 

 


터미널에 저거 치면 된다. 

아 쉽다.-_- 

그리고 다시 ssh root@[IP]

하면 이제 될꺼에요^^ 



혹시 그래도 안된다면

find / -name known_hosts 을 통해 해당파일을 찾아 지우면 된데요.
root계정이면 /root/.ssh/known_hosts 에 있고,
일반계정이면 /home/username/.ssh/known_hosts 에 있답니다.

그럼 즐거운 리눅스 생활! 


'develop > linux' 카테고리의 다른 글

sqlite 동시 접근시 에러??  (0) 2012.08.11
spin_lock, spin_lock_irq, spin_lock_bh  (0) 2012.06.28
mysql_ping 15분 hang 해결방안  (0) 2012.06.28
ubuntu 기본 설정  (0) 2012.05.30
segment fault 지점 찾기  (0) 2012.04.06

.bashrc (혹은 쉘 종류별 파일)

alias ll='ls -al'

alias grep='grep --color=auto'


.vimrc

set ts=4

set number


부트로그 활성화

# vi /etc/default/bootlogd

BOOTLOGD_ENABLE=Yes

'develop > linux' 카테고리의 다른 글

sqlite 동시 접근시 에러??  (0) 2012.08.11
spin_lock, spin_lock_irq, spin_lock_bh  (0) 2012.06.28
mysql_ping 15분 hang 해결방안  (0) 2012.06.28
ssh 접속시 증명서 변경됐다고 나올 때  (0) 2012.05.31
segment fault 지점 찾기  (0) 2012.04.06

예제를 위하여 간단한 코드를 작성하였다.

배열 data[[]는 65535개의 int 형이다.

 

segment fault 발생을 위해 배열 범위를 넘겨 데이타를 쓰려고 시도해 본다.

 

 

core dump 파일 생성을 위하여

ulimit -c unlimited 를 수행해 준다

소스코드 컴파일시 -g 옵션을 붙여 심볼이 생성되도록 한다.

 

 

segment fault로 인하여 core dump 파일이 생긴것을 확인하고

gdb를 이용하여 segment fault 지점을 확인한다.

 
 
cross compile 환경에서도 core파일을 nfs로 넘겨
gdb-ppc 같으것으로 확인해볼수 있다


퍼옴 : http://blog.naver.com/gooddev/110008383660

'develop > linux' 카테고리의 다른 글

sqlite 동시 접근시 에러??  (0) 2012.08.11
spin_lock, spin_lock_irq, spin_lock_bh  (0) 2012.06.28
mysql_ping 15분 hang 해결방안  (0) 2012.06.28
ssh 접속시 증명서 변경됐다고 나올 때  (0) 2012.05.31
ubuntu 기본 설정  (0) 2012.05.30

이미지가 포함되어 있는 HTML파일을 MHTML파일로 저장시 이미지의 경로에 한글이 포함되면 이미지가 정상적으로 저장되지 않는다.

이미지를 포함해서 MTHML파일로 저장시에는 꼭 영문 경로로 된 곳에 이미지 파일을 놓고 HTML파일에 삽입시켜야 한다.


클래스 라이브러리를 웹에서 다운 받은 후 동적로딩하면 더 좋지 않을까? 란 생각에 다운로드받는 부분도 찾아봤다..

        private void Download(string strModule)
        {
            try {
                WebRequest ttt = WebRequest.Create("http://indra17.mireene.com/Test/" + strModule + ".dll");
                WebResponse mmm = ttt.GetResponse();
                Stream kkk = mmm.GetResponseStream();

                int BUFFER = 1024;
                BinaryWriter bw = null;
                BinaryReader br = new BinaryReader(kkk);
                try
                {
                    Byte[] data = new byte[BUFFER];
                    FileStream fs = new FileStream(System.IO.Path.Combine(m_strSavePath, strModule + ".dll"), FileMode.Create);

                    long total = 0;
                    int recv_size = 0;

                    long prg_value = 0;
                    long time = 0;

                    try
                    {
                        bw = new BinaryWriter(fs);

                        while (true)
                        {
                            recv_size = br.Read(data, 0, BUFFER);

                            if (recv_size <= 0) break;

                            bw.Write(data, 0, recv_size);

                            total += recv_size;
                        }
                        Console.WriteLine("Download Size = {0}", total);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                    finally
                    {
                        if (bw != null) bw.Close();
                        if (br != null) br.Close();
                    }
                    fs.Close();

                    kkk.Close();
                    mmm.Close();
                } catch (ArgumentNullException ane) {
                    Console.WriteLine("ArgumentNullException : {0}",ane.ToString());
                } catch (SocketException se) {
                    Console.WriteLine("SocketException : {0}",se.ToString());
                } catch (Exception e) {
                    Console.WriteLine("Unexpected exception : {0}", e.ToString());
                }
            } catch (Exception e) {
                Console.WriteLine( e.ToString());
            }
       }

'develop > windows' 카테고리의 다른 글

MHTML 저장 유의사항  (0) 2011.03.09
C#에서 클래스 라이브러리 동적 로딩  (0) 2010.09.29
C# ActiveX 만들기  (0) 2010.09.29
ActiveX 에서 다른 ActiveX를 생성할 때 주의점  (0) 2010.07.29
IObjectSafety  (1) 2010.02.03

// 클래스 라이브러리 로딩
Assembly assem = Assembly.LoadFile(System.IO.Path.Combine(m_strSavePath, strModule + ".dll"));

//타입 얻기
string strType = strModule.Substring(0, strModule.IndexOf("Library"));
//Type targetType = assem.GetType(strModule + "." + strType);
Type targetType = assem.GetType(strModule + "." + strType);

//객체 생성 - 디폴트 생성자 호출
Object obj = assem.CreateInstance(targetType.FullName);

//멤버에 값 설정 - 마지막 인수 5가 멤버에 값을 설정하는 부분 입니다.
//바인딩 플래그의 마지막이 셋필드임을 확인하실 수 있을 겁니다.
try
{
        strRes = (string)targetType.InvokeMember(strMethod,
        BindingFlags.InvokeMethod | BindingFlags.Instance |
        BindingFlags.Public | BindingFlags.Static, null, obj, new string[] { strParam });
}
catch(Exception e) {
        Console.WriteLine(e.ToString());
}



참고.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=82904&ref=82872

MSDN 검색
reflection, Dynamically Loading and Using Types


http://mixy.egloos.com/953406

    /// <summary>
    /// See Internet SDK, IObjectSafety.
    /// </summary>
    [Flags]
    public enum ObjectSafetyFlags : int
    {
        /// <summary>

        /// Caller of interface may be untrusted
        /// </summary>
        INTERFACESAFE_FOR_UNTRUSTED_CALLER = 1,

        /// <summary>
        /// Data passed into interface may be untrusted
        /// </summary>
        INTERFACESAFE_FOR_UNTRUSTED_DATA = 2,

        /// <summary>
        /// Object knows to use IDispatchEx.
        /// </summary>
        INTERFACE_USES_DISPEX = 4,

        /// <summary>
        /// Objects knows to use IInternetHostSecurityManager.
        /// </summary>
        INTERFACE_USES_SECURITY_MANAGER = 8,

        /// <summary>
        /// Flags combination.
        /// </summary>
        SafeForScripting = INTERFACESAFE_FOR_UNTRUSTED_CALLER |
        INTERFACESAFE_FOR_UNTRUSTED_DATA
    }

    [ComImport]
    [Guid("CB5BDC81-93C1-11cf-8F20-00805F3CD064")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        void GetInterfaceSafetyOptions(ref Guid riid, out int supportedOptions, out int enabledOptions);
        void SetInterfaceSafetyOptions(ref Guid riid, int optionSetMask, int enabledOptions);
    }
    [Guid("5E603C7D-4B7C-412a-BAB4-064E5674F97A")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]
    public interface IActiveXControl_Method
    {
        [DispId(1)]
        string dispFunction(string str);
    }

[ProgId("TestServer.ActiveX")]
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("D2BD9E76-C60B-4724-B44E-986132D8FA7A")]
    public partial class Server : UserControl, IActiveXControl_Method, IObjectSafety
    {
        #region For Registration
        [ComRegisterFunction()]
        public static void RegisterClass(string key)
        {
            //Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
            StringBuilder sb = new StringBuilder(key);
            sb.Replace(@"HKEY_CLASSES_ROOT\", "");

            //Open the CLSID\{guid} key for write access
            RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);

            //And create the 'Control' key - this allows it to show up in
            //the ActiveX control container
            RegistryKey ctrl = k.CreateSubKey("Control");

            ctrl.Close();

            //Next create the CodeBase entry - needed if not string named and GACced.
            RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
            inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
            inprocServer32.Close();

            //Finally close the main key
            k.Close();
        }

        [ComUnregisterFunction()]
        public static void UnregisterClass(string Key)
        {
            StringBuilder sb = new StringBuilder(Key);
            sb.Replace(@"HKEY_CLASSES_ROOT\", "");

            //Open HKCR\CLSID\{guid} for write access
            RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);

            //Delete the 'Control' key, but don't throw an exception if it does not exist
            k.DeleteSubKey("Control", false);

            //Next open InprocServer32
            RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);

            //And delete the CodeBase key, again not throwing if missing
            k.DeleteSubKey("CodeBase", false);

            //Finally close the main key
            k.Close();
        }
        #endregion

        #region IObjectSafety 멤버
        public void GetInterfaceSafetyOptions(ref Guid riid, out int supportedOptions, out int enabledOptions)
        {
            supportedOptions = enabledOptions = (int)ObjectSafetyFlags.SafeForScripting;
        }

        public void SetInterfaceSafetyOptions(ref Guid riid, int optionSetMask, int enabledOptions)
        {
        }
        #endregion

        string m_strSavePath = System.Environment.GetFolderPath(Environment.SpecialFolder.Templates);

        public Server()
        {
            InitializeComponent();
        }

        #region IActiveX_Method
        public string dispFunction(string str)
        {
                       string strRes;

                        return strRes;
        }
        #endregion
  }

+ Recent posts